在類似 XFS 系統之間複製時空間不足
我有一個帶有 1 個
xfs
分區 (sda1
) 的 4Tb 磁碟。我想將那裡的幾乎所有數據(使用的 3,6Tb 中的 2,8Tb)複製到新磁碟(sdc1
)中。首先我sdc
以同樣的方式準備sda
:parted -l Model: ATA WDC WD40EZRX-00S (scsi) Disk /dev/sda: 4001GB Sector size (logical/physical): 512B/4096B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 4001GB 4001GB xfs primary ... Model: ATA ST4000DM000-1F21 (scsi) Disk /dev/sdc: 4001GB Sector size (logical/physical): 512B/4096B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 4001GB 4001GB xfs primary
然後,我使用
rsync
將 2.8Tb 從復製sda1
到sdc1
,但我的空間不足sdc1
:df -h Filesystem Size Used Avail Use% Mounted on /dev/sdc1 3.7T 3.7T 20K 100% /home/alexis/STORE /dev/sda1 3.7T 3.6T 52G 99% /home/alexis/OTHER
怎麼了?。在這裡,我發布了一些我收集的輸出。在您的回答中考慮我只是提供這些數據,因為我只是在猜測,但我不知道它的真正含義(我想知道!)。例如,我注意到 的差異
sectsz
,但沒有任何變化parted -l
……這是什麼意思?我還注意到節點數量的差異……為什麼?非常感謝!
df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sdc1 270480 270328 152 100% /home/alexis/STORE /dev/sda1 215387968 400253 214987715 1% /home/alexis/OTHER xfs_info STORE meta-data=/dev/sdc1 isize=256 agcount=4, agsize=244188544 blks = sectsz=4096 attr=2, projid32bit=1 = crc=0 finobt=0 data = bsize=4096 blocks=976754176, imaxpct=5 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=0 log =internal bsize=4096 blocks=476930, version=2 = sectsz=4096 sunit=1 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 xfs_info OTHER/ meta-data=/dev/sda1 isize=256 agcount=4, agsize=244188544 blks = sectsz=512 attr=2, projid32bit=0 = crc=0 finobt=0 data = bsize=4096 blocks=976754176, imaxpct=5 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=0 log =internal bsize=4096 blocks=476930, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 hdparm -I /dev/sdc | grep Physical Physical Sector size: 4096 bytes hdparm -I /dev/sda | grep Physical Physical Sector size: 4096 bytes
編輯
這不是Unable to create files on large XFS filesystem的副本。我有 2 個類似的磁碟,我沒有空間,也沒有 inode,而且我從不增加任何分區的大小。
對於我的其他問題,我添加了一個:如果我使用相同的過程 (
parted
,mkfs.xfs
) 創建兩個分區,為什麼我的兩個分區有不同數量的 inode?編輯2
這里分配組的用法:
xfs_db -r -c "freesp -s -a 0" /dev/sdc1 from to extents blocks pct 1 1 20 20 2.28 2 3 26 61 6.96 4 7 31 167 19.06 8 15 35 397 45.32 16 31 12 231 26.37 total free extents 124 total free blocks 876 average free extent size 7.06452 xfs_db -r -c "freesp -s -a 0" /dev/sda1 from to extents blocks pct 1 1 85 85 0.00 2 3 68 176 0.01 4 7 438 2487 0.10 8 15 148 1418 0.06 16 31 33 786 0.03 32 63 91 4606 0.18 64 127 94 9011 0.35 128 255 16 3010 0.12 256 511 9 3345 0.13 512 1023 18 12344 0.49 1024 2047 10 15526 0.61 2048 4095 72 172969 6.81 4096 8191 31 184089 7.25 8192 16383 27 322182 12.68 16384 32767 15 287112 11.30 262144 524287 2 889586 35.02 524288 1048575 1 631150 24.85 total free extents 1158 total free blocks 2539882 average free extent size 2193.34
你的 inode 用完了。
df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sdc1 270480 270328 152 100% /home/alexis/STORE /dev/sda1 215387968 400253 214987715 1% /home/alexis/OTHER
sdc1/STORE 文件系統上有 270,480 個 inode,您已經全部使用過了。這就是為什麼您會收到空間不足警告。
為什麼 STORE 的 inode 比 OTHER 少得多?
兩者之間唯一的結構差異是行業規模。這無關緊要,因為兩個卷都使用 4096b 塊大小。問題在於 XFS 如何進行 inode 分配。它是動態的。
答案隱藏在問題中:Unable to create files on large XFS filesystem
問題在於 XFS 如何分配 inode。與大多數文件系統不同,分配會隨著新文件的創建而動態發生。但是,除非您另外指定,否則 inode 被限制為 32 位值,這意味著它們必須適合文件系統上的第一個 TB 儲存空間。因此,如果您完全填滿了第一個 TB,然後擴大了磁碟,您仍然無法創建新文件,因為無法在新空間上創建 inode。
xfs_copy
使用或複制數據可能會更好地為您服務xfs_dump/xfs_restore
,然後修剪掉您不想複製的數據。