Raid

如何調整 RAID 中完整根或交換分區的大小?

  • May 8, 2013

這一切都始於幾週前:

  • 當我嘗試使用 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 中,有兩種​​方法可以訪問隱藏在掛載點下的文件和目錄:

  1. 顯而易見的方法 - 解除安裝安裝在目錄上的文件系統,然後查看該目錄中的內容。顯然,在使用文件系統時這是不可能做到的。
  2. 使用綁定掛載,外部文件系統可以在樹中的另一個目錄中訪問,並且正常的綁定掛載不是遞歸的——它們不會複製嵌套掛載,因此在舊位置過度掛載的目錄可以在新位置訪問。這可以在正在執行的機器上進行,而不會中斷使用文件系統的操作,因此這裡將使用此方法。

為根文件系統執行這種綁定掛載的命令:

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

引用自:https://serverfault.com/questions/505988