私が見る理由:
btrfs replace "ERROR: target device smaller than source device"
ソースデバイスファイルシステムを次の方法でターゲットデバイスより小さく縮小した場合:
btrfs filesystem resize <devid>:<small-size> /mountpoint
ベストアンサー1
ディスクを交換しようとしたときにこの問題が発生しました。少し小さいです。ソースドライブのファイルシステムのサイズを変更した後も、このエラーが発生します。ディスク全体を使用しているため、パーティションのサイズを変更できません。デバイスパスの代わりにソースドライブのデバイスを渡すのがトリックです。これにより、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
/dev/sdfを/dev/sdgに置き換えたいです。
試み#1:
# btrfs replace start /dev/sdf /dev/sdg /mnt/storage
ERROR: target device smaller than source device (required 8001561124864 bytes)
/dev/sdf(devid 5) でファイルシステムのサイズを変更します。
# blockdev --getsize64 /dev/sdg
8001546444800
# btrfs fi res 5:8001546444800 /mnt/storage
Resize '/mnt/storage' of '5:8001546444800'
試み#2:
# btrfs replace start /dev/sdf /dev/sdg /mnt/storage
ERROR: target device smaller than source device (required 8001561124864 bytes)
お金を守ってください。ソースがブロックデバイスとして指定されており、ターゲットreplace
に十分なスペースがあることを確認したときにのみブロックデバイスのサイズを表示した場合に発生します。しかし、ソースコードを詳しく見てみると、replace
ソースデバイスが異なる方法で処理され、実際にファイルシステムから正しいサイズが取得されることがわかりました。
これは試み#3を引き起こします。
# btrfs replace start 5 /dev/sdg /mnt/storage
以前のサイジングと組み合わせたこの式を使用すると、交換操作を正常に開始できます。