Linux

rsync(和 scp)失敗,XFS 設備上沒有剩餘空間

  • December 30, 2015

我有一個全新安裝的 CentOS 7,主分區為 400GB,為 XFS 格式化。目前使用的不到 1 GB。我正在嘗試 rsync 65GB 的文件,並且副本開始在 14GB 和 26GB 之間失敗。(我已經嘗試過多次。)

我有足夠的空間:

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      400G  919M  400G   1% /
devtmpfs        7.3G     0  7.3G   0% /dev
tmpfs           7.2G     0  7.2G   0% /dev/shm
tmpfs           7.2G   41M  7.2G   1% /run
tmpfs           7.2G     0  7.2G   0% /sys/fs/cgroup
/dev/xvdb        37G   49M   35G   1% /mnt

我有很多 inode:

# df -ih
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/xvda1       400M   24K  400M    1% /
devtmpfs         1.9M   289  1.9M    1% /dev
tmpfs            1.8M     1  1.8M    1% /dev/shm
tmpfs            1.8M   280  1.8M    1% /run
tmpfs            1.8M    13  1.8M    1% /sys/fs/cgroup
/dev/xvdb        2.4M    11  2.4M    1% /mnt

我不知道這是什麼意思,但我看到它在其他地方引用過,所以我認為它有助於診斷:

# xfs_db -r "-c freesp -s" /dev/xvda1
  from      to extents  blocks    pct
     1       1      82      82   0.00
     2       3      14      30   0.00
     4       7      12      63   0.00
     8      15      13     131   0.00
    16      31      17     369   0.00
    32      63       9     408   0.00
    64     127       8     774   0.00
   128     255       9    1702   0.00
   256     511       4    1605   0.00
   512    1023       6    4267   0.00
  1024    2047       1    1664   0.00
  2048    4095       2    7446   0.01
  8192   16383       2   24221   0.02
 32768   65535       1   33389   0.03
131072  262143       1  205592   0.20
262144  524224     200 104345607  99.73
total free extents 381
total free blocks 104627350
average free extent size 274612

我不知道還有什麼需要檢查,或者為什麼它一直失敗。上面引用的部分來自副本之前。複製後,inode 為 47K。

提前感謝您提供的任何幫助。

編輯:使用 CentOS 7,而不是 CentOS 6.7。另外,核心版本:

# uname -r
3.10.0-123.8.1.el7.x86_64

編輯2:

以下是再次嘗試後的結果(失敗前完成了 22GB/65GB):

# touch test
touch: cannot touch ‘test’: No space left on device
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      400G   22G  379G   6% /
devtmpfs        7.3G     0  7.3G   0% /dev
tmpfs           7.2G     0  7.2G   0% /dev/shm
tmpfs           7.2G   41M  7.2G   1% /run
tmpfs           7.2G     0  7.2G   0% /sys/fs/cgroup
/dev/xvdb        37G   49M   35G   1% /mnt
# df -ih
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/xvda1       400M   47K  400M    1% /
devtmpfs         1.9M   289  1.9M    1% /dev
tmpfs            1.8M     1  1.8M    1% /dev/shm
tmpfs            1.8M   280  1.8M    1% /run
tmpfs            1.8M    13  1.8M    1% /sys/fs/cgroup
/dev/xvdb        2.4M    11  2.4M    1% /mnt
# xfs_db -r "-c freesp -s" /dev/xvda1
  from      to extents  blocks    pct
     1       1      60      60   0.00
    64     127       1      81   0.00
   128     255       1     186   0.00
   512    1023       3    2317   0.00
  1024    2047       2    2538   0.00
  2048    4095       1    2310   0.00
  4096    8191       1    8001   0.01
  8192   16383       2   25782   0.03
262144  524224     189 99059740  99.96
total free extents 260
total free blocks 99101015
average free extent size 381158

即使以 root 身份,我也無法創建任何新文件或目錄。

編輯 3:其他請求的資訊:

# xfs_info /dev/xvda1
meta-data=/dev/xvda1             isize=256    agcount=201, agsize=524224 blks
        =                       sectsz=512   attr=2, projid32bit=1
        =                       crc=0
data     =                       bsize=4096   blocks=104855999, imaxpct=25
        =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal               bsize=4096   blocks=2560, version=2
        =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

鑑於您發布的內容,XFS 中只有少數幾個地方會導致此問題。這裡有兩個:

  • 配額。這些並不是很容易意外打開,但如果沒有其他任何結果,這是另一個值得檢查的領域。尋找uquota安裝選項。如果您仍然有懷疑,noquota作為一個選項將告訴一切停止報價。
  • 掛載選項。你應該inode64在你的掛載選項中有掛載標誌,告訴核心使用 64 位 inode 分配。如果您沒有它,核心可能會ENOSPC在嘗試創建新文件和目錄時拋出(空間不足)。您的分區不夠大,無法解決此問題,但此時我們無法輕鬆檢查。

在 XFS 之外,還有一件事需要檢查。

  • Open File-Handle Ulimit可能是 rsync 遇到的問題。如果是記憶體,您將看到不同的錯誤。

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