我有一个 4Tb 磁盘,其中有 1 个xfs
分区 ( sda1
)。我想将其中的几乎所有数据(使用的 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
编辑
这不是重复的无法在大型 XFS 文件系统上创建文件。我有 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
答案1
您的 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 分配。它是动态的。
答案就隐藏在问题中:无法在大型 XFS 文件系统上创建文件
问题在于 XFS 如何分配 inode。与大多数文件系统不同,分配是在创建新文件时动态进行的。但是,除非您另行指定,否则 inode 限制为 32 位值,这意味着它们必须适合文件系统上的第一个 TB 存储空间。因此,如果您完全填满了第一个 TB,然后扩大磁盘,您仍然无法创建新文件,因为无法在新空间上创建 inode。
您可能更愿意使用xfs_copy
或xfs_dump/xfs_restore
复制数据,然后删除您不想复制的数据。