为什么我看到:
btrfs replace "ERROR: target device smaller than source device"
Run Code Online (Sandbox Code Playgroud)
当我已经通过以下方式将源设备文件系统缩小到小于目标时:
btrfs filesystem resize <devid>:<small-size> /mountpoint
Run Code Online (Sandbox Code Playgroud)
我在尝试用稍微小一点的磁盘替换磁盘时遇到了这个问题。即使在调整源驱动器上的文件系统大小后,我仍然收到此错误。由于我使用的是整个磁盘,因此无法调整分区大小。事实证明,诀窍是为源驱动器传递一个 devid 而不是设备路径。这似乎导致btrfs filesystem replace
检查源设备上的实际文件系统大小,而不是设备本身的大小。
我的初始状态:
# btrfs fi show /mnt/storage
Label: 'Storage' uuid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Total devices 5 FS bytes used 15.25TiB
devid 1 size 7.28TiB used 3.84TiB path /dev/sdb
devid 2 size 7.28TiB used 3.84TiB path /dev/sdc
devid 3 size 7.28TiB used 3.84TiB path /dev/sdd
devid 4 size 7.28TiB used 3.84TiB path /dev/sde
devid 5 size 7.28TiB used 3.84TiB path /dev/sdf
Run Code Online (Sandbox Code Playgroud)
我想用 /dev/sdg 替换 /dev/sdf。
尝试#1:
# btrfs replace start /dev/sdf /dev/sdg /mnt/storage
ERROR: target device smaller than source device (required 8001561124864 bytes)
Run Code Online (Sandbox Code Playgroud)
在 /dev/sdf (devid 5) 上调整文件系统的大小:
# blockdev --getsize64 /dev/sdg
8001546444800
# btrfs fi res 5:8001546444800 /mnt/storage
Resize '/mnt/storage' of '5:8001546444800'
Run Code Online (Sandbox Code Playgroud)
尝试#2:
# btrfs replace start /dev/sdf /dev/sdg /mnt/storage
ERROR: target device smaller than source device (required 8001561124864 bytes)
Run Code Online (Sandbox Code Playgroud)
没变。指定源为块设备时出现,replace
只在检查目的上是否有足够空间时看块设备的大小。然而,仔细阅读源代码,我发现它replace
以不同的方式处理源 devid,并且实际上从文件系统中检索了正确的大小。
这导致了尝试 #3:
# btrfs replace start 5 /dev/sdg /mnt/storage
Run Code Online (Sandbox Code Playgroud)
此公式与前面的调整大小相结合,使替换操作成功启动。
归档时间: |
|
查看次数: |
516 次 |
最近记录: |