我知道这类问题经常被问到,但我似乎无法弄清楚发生了什么。 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
,您将文件系统从 逐字节复制sda1
到sdc1
。文件系统是在 上创建的sda1
,因此mkfs.ext4
使文件系统占用 的确切大小sda1
。然而,sdc1
大于sda1
。因此,结果是在 12TB 的分区内有一个 10TB 的文件系统。
解决方案是resize2fs
调整文件系统的大小,使其占据整个分区。您可以将所需的确切文件系统大小传递给resize2fs
,但如果您只是希望将其大小调整为分区的大小,则这是不必要的。卸载后/dev/sdc1
,只需以 root 身份运行resize2fs /dev/sdc1
,它就会将文件系统的大小调整为 12TB。
注意:
您应该谨慎使用这种类型的文件系统复制;原始文件和副本都将具有相同的 UUID。如果两个分区同时位于系统中,则标识符不再是唯一的。
因此,当您要擦除源驱动器(即您只是将分区移动到新磁盘,而不是复制它),或者您计划手动更改复制分区的 UUID 时,请使用此方法。