ddを使用して生成されたファイルイメージを縮小する方法は?

ddを使用して生成されたファイルイメージを縮小する方法は?

この投稿でプロセスを試しました。イメージファイルのパーティションのサイズ変更。私の例では、なぜ問題が発生するのか理解できませんでした。

を使用して8GBの画像を作成しましたdd。イメージには2つのパーティションが含まれています。

私はマッピングされた画像を使用しますlosetup -P /dev/loop0 $image-file

それから:

resize2fs /dev/loop0p2 4000M
resize2fs 1.44.1 (24-Mar-2018)
Resizing the filesystem on /dev/loop0p2 to 1536000 (4k) blocks.
The filesystem on /dev/loop0p2 is now 1536000 (4k) blocks long.

e2fsck -f /dev/loop0p2 ->>> clean

parted /dev/loop0
(parted) resizepart 2 4000MB` ; print gives 4GB partition
(parted) quit

partprobe -s /dev/loop0

lsblk /dev/loop0
NAME      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0       7:0    0   7,5G  0 loop 
├─loop0p1 259:2    0   256M  0 loop 
└─loop0p2 259:3    0   3,5G  0 loop 

root@O3:/home/m/tmp# e2fsck -f /dev/loop0p2
e2fsck 1.44.1 (24-Mar-2018)
The filesystem size (according to the superblock) is 1903360 blocks
The physical size of the device is 1154143 blocks
**Either the superblock or the partition table is likely to be corrupt**!
Abort? yes

resize2fspartedを使用してパーティションのサイズを変更すると、クリーンアップ後に矛盾が発生する可能性がありますe2fsck

画像ファイルを縮小する方法を調べるためのアイデアはありますか?

答え1

@sudodusと@fra-sanに感謝します。

resize2fspartedファイルシステム/パーティションを結合して縮小すると互換性の問題があるようです。 resize2fsは4kブロックを使用し、partedはバイトまたはMB、GBなどを使用します。

結局、2番目のパーティションを縮小する別の方法が見つかりましたgnome-disks。 Linux Mintに付属しており、うまく動作します。 parted と gparted は 2 番目のパーティションの縮小に失敗しましたが、 gnome-disks は 1 回の操作で fs とパーティションのサイズの両方を正常に調整しました。

fs/パーティションの縮小後、loop0p2 の後ろに空きスペースがあります。画像ファイルを縮小したい。だから私はこれをしました:

root@O3:/home/m# fdisk -l /dev/loop0
Disk /dev/loop0: 7,5 GiB, 8068792320 bytes, 15759360 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: 0x8889db7f

Device       Boot  Start     End Sectors  Size Id Type
/dev/loop0p1        8192  532479  524288  256M  c W95 FAT32 (LBA)
/dev/loop0p2      532480 8355839 7823360  3,7G 83 Linux

サイズを切る? (8192+524288+7823360)*512=4278190080B

truncate --size=4278190080 image-file.img

生成されたイメージファイルをLoop0に再マップした後、fs /パーティションエラーは発生しなくなりました。

関連情報