Ubuntu Server(cli)를 통해 Raspberry Pi SD .img 축소

Ubuntu Server(cli)를 통해 Raspberry Pi SD .img 축소

16GB 카드에 Raspbian을 설치하고 파일 시스템을 확장했습니다. 카드를 백업했을 때 dd.img 파일 출력은 약 16GB였습니다. 이 중 대부분은 ext4 파티션에서 사용되지 않은 공간입니다. 저는 해당 파티션에서 약 2.5GB의 공간만 사용했습니다. (두 개의 파티션이 있습니다. 첫 번째는 부팅용 FAT이고 두 번째는 rootfs용 ext4입니다.) 이미지를 더 작은 크기로 복원할 수 있도록 Ubuntu 16.04 서버 설치(GUI 없음)에 있는 backup.img 파일을 축소하고 싶습니다. 크기 카드(예: 8GB).

/dev/loop0지금까지 나는 나에게 제공된 오프셋 값을 사용하여 ext4 파티션을 마운트했습니다 fdisk -l backup.img. 그런 다음 ext4 fs를 축소하는 것처럼 보이는 e2fsck -f /dev/loop0then을 사용했습니다 . 제가 올바른 방향으로 가고 있나요? 다음이 될 것 resize2fs -M /dev/loop0같지만 parted난 이미아니요그것을 경험해 보세요.

cli 도구만 사용하여 이 작업을 어떻게 수행할 수 있습니까?


고쳐 쓰다:

다음은 실행 결과입니다 fdisk -l backup.img.

Disk backup.img: 14.9 GiB, 15931539456 bytes, 31116288 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x79d38e92

Device        Boot  Start      End  Sectors  Size Id Type
backup.img1 *      8192   124927   116736   57M  e W95 FAT16 (LBA)
backup.img2      124928 31116287 30991360 14.8G 83 Linux

답변1

fdisk/parted가 다음 단계로 파일 시스템을 축소하는 올바른 방향으로 가고 있음을 확인할 수 있습니다. 까다로운 부분은 새 파일 시스템의 크기 바로 옆에 가져오거나, 계산을 하거나, 안전을 위해 추가로 100KB를 누출하는 것입니다. 필요한 경우 나중에 새 카드에서 조정할 수 있습니다.

명령은 일반적으로 umount, resize, fdisk/parted, partprobe, fsck 및 모든 것이 정상인지 확인하기 위한 mount입니다. 크기를 조정하려는 파티션이 2T보다 작으므로 fdisk또는 를 사용할 수 있습니다 parted.

파일 시스템이 회수해야 하는 공간을 여전히 차지하고 있는 동안에는 파티션을 안정적으로 축소할 수 없기 때문에 크기 조정 프로세스가 먼저 수행되어야 합니다. 일관성을 유지하기 위해 파티션을 다시 축소해야 하고 남은 공간이 없기 때문에 "구독"을 제거하여 사용해야 합니다. 파일 시스템 구조가 새 크기와 일치하도록 파일 시스템이 마지막에 배치됩니다.

이 RH 기사를 남겨 드리겠습니다. partprobe새 파티션 크기가 항상 즉시 인식되지 않거나 이전 커널에서 인식되지 않기 때문에 누락되었습니다 .

resize2fs를 사용하여 ext2/3/4 파일 시스템을 축소하는 방법

fdisk를 사용하여 파티션 크기를 조정하는 방법

누락된 단계는 다음과 같습니다.

sudo fdisk /dev/loop
p     - to check for partition number (probably 2)
d     - to delete
2     - partition 2
n     - new partition
p     - primary
ENTER - default beginning
+new size -  smaller card size
w      - write it

sudo partprobe /dev/loop

이를 수행하려면 이미지 파일을 마운트 해제하십시오. 추가 크기는 더 이상 파일 이미지의 파일 시스템 및 파티션 크기에서 사용되는 것으로 표시되지 않으므로 운영 체제는 공간을 사용하려고 시도하지 않습니다. 따라서 예상 크기로 안전하게 잘라낼 수 있습니다.

truncate -s 8GB fileName

적절한 크기를 사용하려면 게으르기 때문에 파일 시스템을 필요한 것보다 작은 크기로 파쇄하고(즉, 새 파티션의 크기 - 400k, 그런 다음 파티션을 축소한 후 다시 확장) 필요한 파티션을 생성합니다. 크기 사용(가능한 첫 번째 파티션 채우기는 8GB-2048(2K)에서 첫 번째 파티션 크기를 뺀 크기) 수학은 별로 필요하지 않습니다.

올바르게 계산하려면 다음을 살펴보세요.

데이터 손실 없이 ext3 파티션 크기를 조정하는 방법

답변2

사용하는 방법자동 RPi 이미지 축소기?

코드를 보고 무슨 일이 일어나고 있는지 확인할 수도 있습니다.

if [[ ! $(whoami) =~ "root" ]]; then
echo ""
echo "**********************************"
echo "*** This should be run as root ***"
echo "**********************************"
echo ""
exit
fi

if [[ -z $1 ]]; then
echo "Usage: ./autosizer.sh "
exit
fi

if [[ ! -e $1 || ! $(file $1) =~ "x86" ]]; then
echo "Error : Not an image file, or file doesn't exist"
exit
fi

partinfo=`parted -m $1 unit B print`
partnumber=`echo "$partinfo" | grep ext4 | awk -F: ' { print $1 } '`
partstart=`echo "$partinfo" | grep ext4 | awk -F: ' { print substr($2,0,length($2)-1) } '`
loopback=`losetup -f --show -o $partstart $1`
e2fsck -f $loopback
minsize=`resize2fs -P $loopback | awk -F': ' ' { print $2 } '`
minsize=`echo $minsize+1000 | bc`
resize2fs -p $loopback $minsize
sleep 1
losetup -d $loopback
partnewsize=`echo "$minsize * 4096" | bc`
newpartend=`echo "$partstart + $partnewsize" | bc`
part1=`parted $1 rm 2`
part2=`parted $1 unit B mkpart primary $partstart $newpartend`
endresult=`parted -m $1 unit B print free | tail -1 | awk -F: ' { print substr($2,0,length($2)-1) } '`
truncate -s $endresult $1

관련 정보