Xfs

在類似 XFS 系統之間複製時空間不足

  • March 2, 2016

我有一個帶有 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 從復製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

編輯

這不是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,然後修剪掉您不想複製的數據。

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