在类似的 XFS 系统之间复制时空间不足

在类似的 XFS 系统之间复制时空间不足

我有一个 4Tb 磁盘,其中有 1 个xfs分区 ( sda1)。我想将其中的几乎所有数据(使用的 3.6Tb 中的 2.8Tb)复制到新磁盘 ( )。首先,我以相同的方式sdc1进行了准备:sdcsda

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 从 复制sda1sdc1,但是 中的空间不足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_copyxfs_dump/xfs_restore复制数据,然后删除您不想复制的数据。

相关内容