新磁盘上的分区大小不正确

新磁盘上的分区大小不正确

我知道这类问题经常被问到,但我似乎无法弄清楚发生了什么。 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

答案1

看来您对分区和文件系统之间的关系有误解。您的分区实际上是正确的大小,但您的文件系统不是。

当您运行时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 时,请使用此方法。

相关内容