Filesystems

新磁碟上的分區大小不正確

  • October 13, 2021

我知道這類問題經常被問到,但我似乎無法弄清楚發生了什麼。tl;dr:我將現有磁碟複製到更大的磁碟上,但df僅以原始磁碟的大小顯示,即使分區表看起來不錯。

我在我的 Debian 系統上有一個 10TB 的備份驅動器/dev/sda,並添加了一個 12TB 的驅動器作為附加備份/dev/sdc。最終我會刪除第一個備份,到異地儲存。我曾經parted創建一個新分區,用完整個可用空間,然後mkfs.ext4在其上創建一個文件系統。然後我掛載了這個文件系統,並df -h顯示了預期的結果:原始磁碟為 9.1T,新磁碟為 11T。

我將原件複製到新驅動器上pv < /dev/sda1 > /dev/sdc1。由於這是一個複製,因此我使用 為這個分區創建了一個新的 UUID uuidgen,並使用它來將磁碟掛載到/etc/fstab.

新驅動器有我期望的文件。但是,df現在將兩個驅動器顯示為相同:

# df -h
Filesystem      Size  Used Avail Use% Mounted on
[...]
/dev/sda1       9.1T  6.5T  2.6T  72% /mnt/Backup1
/dev/sdc1       9.1T  6.5T  2.6T  72% /mnt/Backup2

這是第一次掛載磁碟時的情況;這不像任何現有的操作都在打開文件。

的輸出fdisk顯示分區是預期的大小:

# fdisk -l /dev/sdc
Disk /dev/sdc: 10.9 TiB, 12000105070592 bytes, 23437705216 sectors
Disk model: Elements 25A3   
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 96102C84-3B01-4361-A9C2-B44455AEC02E

Device     Start         End     Sectors  Size Type
/dev/sdc1   2048 23437703167 23437701120 10.9T Linux filesystem

一樣lsblk

# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    0  9.1T  0 disk 
└─sda1        8:1    0  9.1T  0 part /mnt/Backup1
sdc           8:32   0 10.9T  0 disk 
└─sdc1        8:33   0 10.9T  0 part 

執行parted似乎也可以確認分區的大小是正確的:

# parted /dev/sdc
GNU Parted 3.2
Using /dev/sdc
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print                                                            
Model: WD Elements 25A3 (scsi)
Disk /dev/sdc: 12.0TB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags
1      1049kB  12.0TB  12.0TB  ext4         primary

然後我試著放手fsck,得到了這個:

# fsck.ext4 /dev/sdc
e2fsck 1.44.5 (15-Dec-2018)
ext2fs_open2: Bad magic number in super-block
fsck.ext4: Superblock invalid, trying backup blocks...
fsck.ext4: Bad magic number in super-block while trying to open /dev/sdc

The superblock could not be read or does not describe a valid ext2/ext3/ext4
filesystem.  If the device is valid and it really contains an ext2/ext3/ext4
filesystem (and not swap or ufs or something else), then the superblock
is corrupt, and you might try running e2fsck with an alternate superblock:
   e2fsck -b 8193 <device>
or
   e2fsck -b 32768 <device>

Found a gpt partition table in /dev/sdc

我嘗試了這些e2fsck選項,但得到了相同的結果。

我搜尋了有關此 fsck 問題的討論,但沒有發現任何有用的資訊,並且我查看了有關df輸出和其他磁碟大小指示之間差異的許多討論中的一些,也沒有太多運氣:通常這種情況下的原因是新磁碟具有原始分區的精確副本。但我的分區似乎確實是正確的大小。

我會很感激這裡的任何建議。我的文件似乎確實在新磁碟上,因此將其擦除並重新開始將花費很多很多小時的重新複製……

編輯:每個請求,輸出gdisk

# gdisk -l /dev/sdc
GPT fdisk (gdisk) version 1.0.3

Partition table scan:
 MBR: protective
 BSD: not present
 APM: not present
 GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sdc: 23437705216 sectors, 10.9 TiB
Model: Elements 25A3   
Sector size (logical/physical): 512/4096 bytes
Disk identifier (GUID): 96102C84-3B01-4361-A9C2-B44455AEC02E
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 23437705182
Partitions will be aligned on 2048-sector boundaries
Total free space is 4029 sectors (2.0 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
  1            2048     23437703167   10.9 TiB    8300  primary

您似乎對分區和文件系統之間的關係有誤解。您的分區實際上是正確的大小,但您的文件系統不是。

執行時pv < /dev/sda1 > /dev/sdc1,您將文件系統逐字節複製sda1sdc1. 文件系統是在 上創建的sda1,因此mkfs.ext4文件系統的大小與sda1. 但是,sdc1大於sda1。所以結果是你在一個 12TB 的分區中有一個 10TB 的文件系統。

解決方案是使用resize2fs調整文件系統的大小,使其占據整個分區。您可以將所需的文件系統大小傳遞給resize2fs,但如果您只是希望將其調整為分區大小,則這是不必要的。/dev/sdc1解除安裝後,只需以 root 身份執行,resize2fs /dev/sdc1它應該將文件系統的大小調整為 12TB。

注意:

您應該謹慎使用這種類型的文件系統複製;原件和副本都將具有相同的 UUID。如果兩個分區同時在系統中,則標識符不再是唯一的。

因此,當您要擦除源驅動器時使用此方法(即您只是將分區移動到新磁碟,而不是複制它),或者如果您打算手動更改複製分區的 UUID。

引用自:https://unix.stackexchange.com/questions/583698