When you run Oracle Grid 12c ‘cluvfy stage -pre crsinst’ on Linux 7 (Oracle Enterprise Linux 7.2 in my case) you will get the following error:
Starting check for /dev/shm mounted as temporary file system ... ERROR: PRVE-0421 : No entry exists in /etc/fstab for mounting /dev/shm PRVE-0421 : No entry exists in /etc/fstab for mounting /dev/shm PRVE-0421 : No entry exists in /etc/fstab for mounting /dev/shm PRVE-0421 : No entry exists in /etc/fstab for mounting /dev/shm Check for /dev/shm mounted as temporary file system failed
When you do a ‘df -h’ you will see that ‘/dev/shm’ actually is mounted:
Filesystem Size Used Avail Use% Mounted on devtmpfs 24G 0 24G 0% /dev tmpfs 24G 0 24G 0% /dev/shm
This is due to a bug (Doc ID 2065603.1) which comes from the case that the cluvfy check does not check the actual mount of the file system, but looks for the persistence line of this mount in ‘/etc/fstab’ like it did in Linux 6. In Linux 7 you get this tmpfs mount by default.
The mounting entry
Now one can still add this line in ‘/dev/fstab’, but if you are happy with the current mount and space, you can leave it like it is. Otherwise you can add this:
tmpfs /dev/shm tmpfs size=4g 0 0
This will create a new mount of ‘/dev/shm’ with (for this case) 4GB of space:
Filesystem Size Used Avail Use% Mounted on devtmpfs 24G 0 24G 0% /dev tmpfs 4.0G 0 4.0G 0% /dev/shm
As one can see, it’s really limited to the 4GB and you did lower it from the default of 24GB, which is not taken from the ‘/dev’ space:
[root@oracle1 shm]# ll total 4194304 -rw-r--r--. 1 root root 1073741824 Jun 13 12:43 test1.img -rw-r--r--. 1 root root 1073741824 Jun 13 12:43 test2.img -rw-r--r--. 1 root root 1073741824 Jun 13 12:44 test3.img -rw-r--r--. 1 root root 1073741824 Jun 13 12:44 test4.img [root@oracle1 shm]# fallocate -l 1G test5.img fallocate: test5.img: fallocate failed: No space left on device [root@oracle1 shm]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/ol_o1-root 50G 1.2G 49G 3% / devtmpfs 24G 0 24G 0% /dev tmpfs 4.0G 4.0G 0 100% /dev/shm
The original untouched ‘/dev/shm’ when creating large files shows this is also taking space from ‘/dev/shm’ and not ‘/dev’ itself:
[root@oracle2 shm]# fallocate -l 1G test5.img [root@oracle2 shm]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 24G 0 24G 0% /dev tmpfs 24G 5.0G 19G 22% /dev/shm
Also filling ‘/dev’ and ‘/dev/shm’ with more than the 24GB of memory (26GB in my case) will show even with the defaults it is not shared:
[root@oracle2 dev]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 24G 13G 11G 56% /dev tmpfs 24G 13G 11G 56% /dev/shm [root@oracle2 dev]# du -sch * | grep total 26G total
New and improved in Linux 7
You can see writing to tmpfs is taking away memory from the system, which is logical, but that ‘tmpfs’ resides in ‘buff/cache’ and is also reported in ‘shared’:
[root@oracle2 dev]# free total used free shared buff/cache available Mem: 49184152 390916 21194876 27271860 27598360 21356000 Swap: 24367100 0 24367100 -- after removing the 26GB of test files: [root@oracle2 dev]# free total used free shared buff/cache available Mem: 49184152 391524 48518616 8884 274012 48641694 Swap: 24367100 0 24367100
A good thing is that Linux 7 subtracts this shared memory from a new column ‘available’, as this subtraction was not the case in Linux 6 !!! You can see it here:
[root@oel6 ~]# free total used free shared buffers cached Mem: 223236 217336 5900 324 86852 40928 -/+ buffers/cache: 89556 133680 [root@oel6 shm]# dd if=/dev/urandom of=sample.txt bs=1M count=50 [root@oel6 shm]# free total used free shared buffers cached Mem: 223236 216716 6520 51524 46468 81116 -/+ buffers/cache: 89132 134104 [root@oel6 shm]# df -h Filesystem Size Used Avail Use% Mounted on tmpfs 109M 50M 59M 46% /dev/shm
I have created a 50MB file in ‘/dev/shm’ and it does not take memory from ‘anywhere’. It moves ~50MB buffers (which includes free memory from tmpfs for ‘pre-reservation’) to cached, but it does not show any difference from `-/+ buffers/cache` in used or free!!!
Happy um… memory sharing… ;)