將 home 的子目錄掛載到自己的分區上會混淆磁碟使用情況報告
一、情況
1.1 設備
我的文件系統有以下安排
/dev/sda8
323 GiB 安裝到**/home
**/dev/sda13
90 GiB 安裝到**/home/user2/storage
**其初衷是將 /home/user2/storage 的命運與所有其他人的命運分開。兩者都是邏輯分區。
lsblk
下面引用。1.2 安裝
/etc/fstab
掛載指令用行編碼UUID=[that of /dev/sda8] /home/ ext4 defaults 0 2 UUID=[that of /dev/sda13] /home/user2/storage ext4 defaults 0 2
坦率地說,我抄襲了其他安裝指令的最後一行。此外,
/etc
被掛載到另一個分區。mount
下面引用了的輸出。
- 證據 =====
這種安排對系統工具報告磁碟使用情況的方式產生了一些副作用。
因此,我不太確定我應該信任哪些診斷程序,以及我實際上可以依靠多少磁碟空間。
請注意,在電腦中有一個user1和一個user2。
2.1 從df看/dev/sda13(儲存)
使用
df
user1 或 user2 給出
df -h
完全沒有輸出/dev/sda13
df -ha
只顯示-
磁碟使用情況/dev/sda13
如果 user2 已經登錄(並且儲存目錄已經掛載)
sudo df -h /dev/sda13
(storage) 顯示與 (home)相同的磁碟使用情況(例如 300 GiB)df -h /dev/sda8
,儘管它們是不同的實體,並且使用的大小對於儲存來說是不可能的別的
sudo df -h /dev/sda13
(儲存)顯示 0.5 GiB 的適度磁碟使用量,我可以將其視為 user12.2 從 gparted 看到的 /dev/sda13(儲存)
然後,當我啟動時
gparted
,使用的大小會根據我是以 user1 還是 user2 身份登錄而有所不同。報告的值對於 user2(誰應該訪問儲存)看起來不錯,而不是對於 user1(誰不應該從儲存中探勘)。但是,我曾期望無論我是誰,使用者都可以獲得公平的資訊。為了更好地衡量,gparted 報告的值都與任何 df 不重合。
旁注:關於
/dev/sda8
(家)的報導在各個方面都是一致的。
- 問題 =====
我確信這種看似不一致的行為背後是有邏輯的。
- 有人能解釋一下嗎?
- 是否有任何跡象表明可以乾淨利落地實施這種文件系統安排,以便報告是公平的?
4.1 附加資訊
4.2
sudo df -h
(user1,2)的輸出這是使用者 1 的輸出
udev 5,9G 8,0K 5,9G 1% /dev tmpfs 1,2G 1,3M 1,2G 1% /run /dev/sda6 48G 5,1G 41G 12% / none 4,0K 0 4,0K 0% /sys/fs/cgroup none 5,0M 0 5,0M 0% /run/lock none 5,9G 380K 5,9G 1% /run/shm none 100M 64K 100M 1% /run/user /dev/sda9 26G 23G 1,7G 94% /opt /dev/sda11 20G 11G 8,1G 57% /usr /dev/sda12 2,0G 1,2G 636M 66% /boot /dev/sda8 314G 298G 4,9G 99% /home /dev/sda10 4,8G 2,9G 1,7G 64% /var /home/user1/.Private 314G 298G 4,9G 99% /home/user1
當 user2 登錄時,最後一行被替換或補充
/home/user2/.Private 314G 298G 4,9G 99% /home/user2
4.2 輸出
sudo lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 698,7G 0 disk ├─sda1 8:1 0 100M 0 part ├─sda2 8:2 0 41,1G 0 part ├─sda3 8:3 0 1K 0 part ├─sda5 8:5 0 145G 0 part ├─sda6 8:6 0 48,6G 0 part / ├─sda7 8:7 0 2,1G 0 part ├─sda8 8:8 0 322,8G 0 part /home ├─sda9 8:9 0 22G 0 part /opt ├─sda10 8:10 0 5G 0 part /var ├─sda11 8:11 0 20G 0 part /usr ├─sda12 8:12 0 2G 0 part /boot └─sda13 8:13 0 90G 0 part sr0 11:0 1 1024M 0 rom
4.3 輸出
sudo mount
/dev/sda6 on / type ext4 (rw,errors=remount-ro) proc on /proc type proc (rw,noexec,nosuid,nodev) sysfs on /sys type sysfs (rw,noexec,nosuid,nodev) none on /sys/fs/cgroup type tmpfs (rw) none on /sys/fs/fuse/connections type fusectl (rw) none on /sys/kernel/debug type debugfs (rw) none on /sys/kernel/security type securityfs (rw) udev on /dev type devtmpfs (rw,mode=0755) devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620) tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755) none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880) none on /run/shm type tmpfs (rw,nosuid,nodev) none on /run/user type tmpfs (rw,noexec,nosuid,nodev,size=104857600,mode=0755) none on /sys/fs/pstore type pstore (rw) /dev/sda11 on /usr type ext4 (rw) /dev/sda12 on /boot type ext4 (rw) /dev/sda8 on /home type ext4 (rw) /dev/sda9 on /opt type ext4 (rw) /dev/sda10 on /var type ext4 (rw) /dev/sda13 on /home/user2/storage type ext4 (rw) binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev) rpc_pipefs on /run/rpc_pipefs type rpc_pipefs (rw) systemd on /sys/fs/cgroup/systemd type cgroup (rw,noexec,nosuid,nodev,none,name=systemd) nfsd on /proc/fs/nfsd type nfsd (rw) /home/user1/.Private on /home/user1 type ecryptfs (ecryptfs_check_dev_ruid,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_unlink_sigs,ecryptfs_sig=...,ecryptfs_fnek_sig=...) gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,user=user1)
4.4 輸出
sudo findmnt
TARGET SOURCE FSTYPE OPTIONS /dev/pts devpts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000
4.5
groups
(user1,2)的輸出user1 adm cdrom sudo dip plugdev lpadmin sambashare common user2 sudo common
- Retrospection ================
@sourcejedi 在下面提供了一個有用的答案。
發生的情況是sda8目錄storage/的內容一直保存為/home/user2/storage,無論user1還是user2登錄,都在user2登錄時掛載到sda13。說storage/包含100G,那麼100G是總是在 /dev/sda8 中使用,有時在 /dev/sda13 中使用。
我通過從 /etc/fstab 文件中將 /dev/sda13 掛載到全新的 /home/storage 上發現了這一點:我以 user2 身份登錄,所有文件仍在 /dev/sda8 中的 /home/user2/storage 中。因此,我將文件移動到分區 sda13 中的一個目錄,並按照建議從 /home/user2 內部使用符號連結引用了這樣一個目錄。
通過這種方式,我在 sda8 中釋放了那些 100G,並且
df -h /dev/sda13
無論我是 user1 還是 user2,都有一個關於儲存大小的可靠報告。
我相信,無論使用者如何,文件 /etc/fstab 都會執行,因此我認為分區總是掛載的。
是的,但是與使用 ecryptfs 存在互動。fstab 在引導時處理。在您輸入解密密碼後,ecryptfs 掛載會在登錄時啟動。例如,問題中顯示的 ecryptfs 掛載將掩蓋 上的任何現有掛載
/home/user1
。findmnt
請注意,當您使用推薦的工具來顯示掛載的層次結構時,這會更加明顯。(mount
不過,對於獲取完整的掛載選項列表,輸出更簡單)。因此,您需要將儲存文件系統掛載到任何使用者的主目錄之外。請注意,您的主目錄之外的文件不會被加密,除非您手動確定如何加密。如果需要,您可以創建指向它的符號連結(例如
ln -s /storage /home/user2/storage
)。它現在的設置方式沒有任何意義,並且也可能破壞其他事情(我對關機時解除安裝的順序持懷疑態度)。請注意,這個問題已經難以分析,因為它缺少
df
命令的完整輸出。還有另一個角落案例,df /dev/sda1
它將顯示/dev
ifsda1
未安裝的用法。如果你看strace df /dev/sda8
,你會看到它沒有訪問設備節點;它從掛載中查找目錄,然後呼叫statfs("/home", ...)
. 我寧願自己跑df -h /home
……儘管如此,當存在這樣的過度安裝的文件系統時,我不一定期望輸出會不會那麼混亂。sda13的遺漏或
-
結果(取決於-a
選項)表明df
有一些程式碼可以檢測超載情況,但並非在所有情況下都有效。編輯:報告上游。