我有一个带有1个xfs分区( sda1 )的4Tb磁盘。 我想复制几乎所有的数据(2,8Tb从3,6Tb使用)到一个新的磁盘( sdc1 )。 首先我以同样的方式准备了sdc :
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从sda1复制2.8Tb到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文件系统上创build文件的副本。 我有2个类似的磁盘,我没有空间,既没有inodes,也没有增加任何分区的大小。
对于我的其他问题,我添加了这个:如果我使用相同的过程( parted , mkfs.xfs )创build它们,为什么我的两个分区有不同数量的inode?
EDIT2
这里的分配组用法:
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
你没有inodes。
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比OTHER更less的inode?
两者之间唯一的结构性差异是行业规模。 哪一个不重要,因为两个卷都使用4096b的块大小。 问题在于XFS如何执行inode分配。 这是dynamic的。
答案隐藏在问题中: 无法在大型XFS文件系统上创build文件
问题原来在于XFS如何分配inode。 与大多数文件系统不同,在创build新文件时会dynamic分配。 但是,除非另外指定,否则索引节点仅限于32位值,这意味着它们必须在文件系统的第一兆字节的存储空间内。 因此,如果您完全填充第一个TB,然后放大磁盘,则仍然无法创build新文件,因为无法在新空间创buildinode。
使用xfs_copy或xfs_dump/xfs_restore复制数据,然后修剪不希望复制的数据可能会更好。