將 /var 掛載為 overlayfs
到目前為止,我在樹莓派上執行只讀文件系統,一切正常,直到我嘗試將 /var 作為覆蓋文件掛載,以便 nginx 和其他服務使用它來工作:
VAROVRL="-o lowerdir=/var,upperdir=/mnt/persist/var-rw,workdir=/mnt/persist/var-work" mount -t overlay ${VAROVRL} overlay /var
雖然這正在工作並且所有服務都沒有問題啟動,但我注意到該
mount
命令僅輸出覆蓋安裝,並且每次重新啟動時都會重複。3次重啟後:
mount overlay on /var type overlay (rw,lowerdir=/var,upperdir=/mnt/persist/var-rw,workdir=/mnt/persist/var-work) overlay on /var type overlay (rw,lowerdir=/var,upperdir=/mnt/persist/var-rw,workdir=/mnt/persist/var-work) overlay on /var type overlay (rw,lowerdir=/var,upperdir=/mnt/persist/var-rw,workdir=/mnt/persist/var-work)
/etc/mount 的輸出
/dev/root / ext4 ro,relatime,data=ordered 0 0 devtmpfs /dev devtmpfs rw,relatime,size=469532k,nr_inodes=117383,mode=755 0 0 sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0 proc /proc proc rw,relatime 0 0 tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0 devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0 tmpfs /run tmpfs rw,nosuid,nodev,mode=755 0 0 tmpfs /run/lock tmpfs rw,nosuid,nodev,noexec,relatime,size=5120k 0 0 tmpfs /sys/fs/cgroup tmpfs ro,nosuid,nodev,noexec,mode=755 0 0 cgroup /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd 0 0 cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpu,cpuacct 0 0 cgroup /sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio 0 0 cgroup /sys/fs/cgroup/memory cgroup rw,nosuid,nodev,noexec,relatime,memory 0 0 cgroup /sys/fs/cgroup/devices cgroup rw,nosuid,nodev,noexec,relatime,devices 0 0 cgroup /sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer 0 0 cgroup /sys/fs/cgroup/net_cls cgroup rw,nosuid,nodev,noexec,relatime,net_cls 0 0 systemd-1 /proc/sys/fs/binfmt_misc autofs rw,relatime,fd=23,pgrp=1,timeout=300,minproto=5,maxproto=5,direct 0 0 debugfs /sys/kernel/debug debugfs rw,relatime 0 0 mqueue /dev/mqueue mqueue rw,relatime 0 0 configfs /sys/kernel/config configfs rw,relatime 0 0 tmpfs /tmp tmpfs rw,relatime,size=102400k 0 0 /dev/mmcblk0p1 /boot vfat ro,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro 0 0 /dev/mmcblk0p5 /mnt/persist ext4 rw,relatime,data=ordered 0 0 /dev/mmcblk0p6 /mnt/cache ext4 rw,relatime,data=ordered 0 0 /dev/mmcblk0p7 /mnt/osboot vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro 0 0 /dev/mmcblk0p8 /mnt/osimage ext4 rw,relatime,data=ordered 0 0 /dev/mmcblk0p9 /mnt/userdata ext4 rw,relatime,data=ordered 0 0 overlay /etc overlay rw,relatime,lowerdir=/etc,upperdir=/mnt/persist/etc-rw,workdir=/mnt/persist/etc-work 0 0 overlay /var overlay rw,relatime,lowerdir=/var,upperdir=/mnt/persist/var-rw,workdir=/mnt/persist/var-work 0 0 binfmt_misc /proc/sys/fs/binfmt_misc binfmt_misc rw,relatime 0 0
/etc/mtab 的輸出
overlay /var overlay rw,lowerdir=/var,upperdir=/mnt/persist/var-rw,workdir=/mnt/persist/var-work 0 0 overlay /var overlay rw,lowerdir=/var,upperdir=/mnt/persist/var-rw,workdir=/mnt/persist/var-work 0 0 overlay /var overlay rw,lowerdir=/var,upperdir=/mnt/persist/var-rw,workdir=/mnt/persist/var-work 0 0
請注意,
/etc
它也作為 overlayfs 安裝,但當它是唯一的覆蓋安裝時不會產生此問題。任何人都可以在這裡發現我做錯了什麼?
該文件
/etc/mtab
由mount
andumount
命令寫入。保持準確需要一些工作,因為他們只能/etc/mtab
在該文件可用且可寫的情況下進行更新。
/etc
對於在引導期間的某個時間點以讀寫方式掛載的通常情況,/etc/mtab
一旦根分區以讀寫方式掛載,發行版就會設置一個在啟動期間重寫的腳本。如果系統在沒有解除安裝所有內容的情況下關閉(例如,由於系統崩潰或電源故障),這是必要的。在您的情況下,
/etc
overlayfs 在哪裡,啟動腳本在/etc
仍然是只讀的錯誤時間執行,或者它不支持覆蓋根的情況。因此,如果您想保留/etc/mtab
為正常文件,則必須調整此腳本或其執行時間。但你可能不需要這樣做。一個常見的設置是有
/etc/mtab
一個符號連結到/proc/mounts
. 這兩個文件包含幾乎相同的資訊和幾乎相同的語法;從讀取它們的應用程序的角度來看,它們是兼容的。由於/proc/mounts
反映了目前核心資訊,它始終是最新的,mount
andumount
命令不會觸及它們。
/proc/mounts
比較的缺點/etc/mtab
是它顯示了核心列印回來的資訊(尤其是掛載選項),而不是傳遞給mount
命令的確切參數。所以會失去一些資訊。不過,這些資訊很少有用。