내가 보는 이유:
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
이전 크기 조정과 결합된 이 공식을 사용하면 교체 작업을 성공적으로 시작할 수 있습니다.
답변2
오류 메시지는 파일 시스템 크기가 아닌 Linux 블록 장치 크기를 나타내므로 소스 파일 시스템이 포함된 파티션은 대상 파일 시스템보다 작거나 같아야 합니다.
대상 장치가 200G라고 가정하고 소스 장치 크기를 199G로 조정합니다.
btrfs filesystem resize <devid>:199g /mountpoint
그런 다음 파티션 크기도 199GiB로 조정합니다. 일단 gdisk
기존 소스 파티션을 삭제한 다음 동일한 시작 섹터로 새 파티션을 생성했지만 입력 종료 섹터 크기는 +199G
.
partprobe /dev/hdd-device
새 파티션을 다시 로드한 후 replace
제대로 작동합니다.
답변3
두 방법 모두 작동하는 것처럼 보이지만 @rkjnsn의 솔루션은 활성 디스크의 파티션 테이블을 덮어쓸 필요가 없기 때문에 덜 위험해 보입니다. 거기에서는 상황이 매우 잘못될 수 있습니다.