Raid
如何調整 RAID 中完整根或交換分區的大小?
這一切都始於幾週前:
- 當我嘗試使用 vi 我得到
"E297: Write error in swap file
$ echo "test" > test
生產-bash: echo: write error: No space left on device
- 我的 bash 歷史記錄總是空的
不是我的配額,因為它發生在所有使用者身上。
除此之外,伺服器似乎還不錯…
我認為它可能是根/交換,但我不知道如何修復它。
以下是一些我認為可能有用的資訊:
$ sudo df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/fileserver--00-root 224G 212G 0 100% / none 995M 192K 995M 1% /dev none 1000M 0 1000M 0% /dev/shm none 1000M 14M 986M 2% /var/run none 1000M 0 1000M 0% /var/lock none 1000M 0 1000M 0% /lib/init/rw /dev/sdb1 1.4T 1006G 356G 74% /cubo/d2p1 /dev/sdc1 459G 416G 39G 92% /cubo/d3p1 /dev/sda1 228M 17M 199M 8% /boot 192.168.1.7:/nfs/Backups 1.8T 1.2T 645G 65% /cubo/nfsMounts/ixBackup
還:
$ ll /dev/mapper/ total 0 crw-rw---- 1 root root 10, 59 2013-04-11 12:54 control brw-rw---- 1 root disk 251, 0 2013-04-11 12:54 fileserver--00-root brw-rw---- 1 root disk 251, 1 2013-04-11 12:54 fileserver--00-swap_1
附加資訊
$ sudo dmsetup status fileserver--00-swap_1: 0 11993088 linear fileserver--00-root: 0 475701248 linear
和:
$ sudo dmsetup info Name: fileserver--00-swap_1 State: ACTIVE Read Ahead: 256 Tables present: LIVE Open count: 1 Event number: 0 Major, minor: 251, 1 Number of targets: 1 UUID: LVM-z7USJS3uIlf3VVUPeDeE0TzljgezS31fcvrwZihBYEENf5Tkgsyb9xJHo3RNVXsT Name: fileserver--00-root State: ACTIVE Read Ahead: 256 Tables present: LIVE Open count: 1 Event number: 0 Major, minor: 251, 0 Number of targets: 1 UUID: LVM-z7USJS3uIlf3VVUPeDeE0TzljgezS31fdr57i4JAzZxlK6KeTOWDTm6bzUKK87J1
我的根文件夾大小:
$ cd / $ sudo du -sh {bin,boot,cdrom,dev,etc,home,lib,lost+found,media,mnt,opt,proc,root,sbin,selinux,srv,sys,tmp,usr,var} 7.4M bin 17M boot 4.0K cdrom 192K dev 39M etc 1.1M home 154M lib 16K lost+found 4.0K media 4.0K mnt 4.0K opt du: cannot access `proc/21251/task/21251/fd/4': No such file or directory du: cannot access `proc/21251/task/21251/fdinfo/4': No such file or directory du: cannot access `proc/21251/fd/4': No such file or directory du: cannot access `proc/21251/fdinfo/4': No such file or directory 0 proc 48K root 7.5M sbin 4.0K selinux 4.0K srv 0 sys 16K tmp 542M usr 282M var
我的 fstab:
$ cat /etc/fstab # /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc nodev,noexec,nosuid 0 0 /dev/mapper/fileserver--00-root / ext4 errors=remount-ro 0 1 # /boot was on /dev/sda1 during installation UUID=1724d880-01a4-481c-87e5-08328c3c8137 /boot ext2 defaults 0 2 /dev/mapper/fileserver--00-swap_1 none swap sw 0 0 /dev/sdb1 /cubo/d2p1 ext3 defaults 0 0 /dev/sdc1 /cubo/d3p1 ext4 defaults 0 0 /dev/sdd1 /cubo/d4p1 ext4 defaults,noauto 0 0 192.168.1.7:/nfs/Backups /cubo/nfsMounts/ixBackup nfs defaults 0 0
我該如何解決?
在調查了聊天中的問題後,確定了原因——根文件系統上的空間被隱藏在掛載點下的文件佔用(因此對
du
.在 Linux 中,有兩種方法可以訪問隱藏在掛載點下的文件和目錄:
- 顯而易見的方法 - 解除安裝安裝在目錄上的文件系統,然後查看該目錄中的內容。顯然,在使用文件系統時這是不可能做到的。
- 使用綁定掛載,外部文件系統可以在樹中的另一個目錄中訪問,並且正常的綁定掛載不是遞歸的——它們不會複製嵌套掛載,因此在舊位置過度掛載的目錄可以在新位置訪問。這可以在正在執行的機器上進行,而不會中斷使用文件系統的操作,因此這裡將使用此方法。
為根文件系統執行這種綁定掛載的命令:
sudo mkdir /mnt/tmp_root sudo mount --bind / /mnt/tmp_root
(在這種情況下使用
/mnt/tmp_root
是可能的,因為為 root 保留的空間不是 100% 消耗的。)然後可以找到隱藏在掛載點下的大文件:
sudo du -x --max-depth=1 /mnt/tmp_root sudo du -x --max-depth=1 /mnt/tmp_root/cubo ...
找到有問題的文件後,可以將其刪除以釋放空間。請注意,無法刪除在同一文件系統的其他綁定掛載中用作掛載點的目錄 - 例如,如果 NFS 文件系統掛載在
/cubo/nfsMounts/ixBackup
,/mnt/tmp_root/cubo/nfsMounts/ixBackup
則無法刪除(但可以刪除它下面的文件和目錄)。最後,未來防範此類問題的一種方法是加強對打算用作掛載點的目錄的權限,以便在出現阻止掛載的問題(例如,NFS 伺服器沒有響應)時,目錄不可訪問,並且嘗試訪問它以明顯的方式失敗:
sudo chown root:root /mnt/tmp_root/cubo/nfsMounts/ixBackup sudo chmod 0600 /mnt/tmp_root/cubo/nfsMounts/ixBackup
(這會更改根文件系統上目錄的權限,並且不會對可以掛載在的文件系統做任何事情
/cubo/nfsMounts/ixBackup
。)最後一個操作是在不再需要綁定掛載後將其移除,並移除臨時目錄:
sudo umount /mnt/tmp_root sudo rmdir /mnt/tmp_root