sdb1
3.3GBのサイズのパーティションがあります。 3.3GBから1.9GBだけを使用し、そのうち1.2GBが空きスペースだ。このパーティションのイメージを作成したいと思います。しかし、画像は1.9 GBのスペースしか使用したくありません。
ddを使ってコマンドを実行すると、次のようになります。
dd if=/dev/sdb1 of=/home/data/Os.img bs=1M status=progress
ddは3.3GBのイメージを作成していますが、割り当てられていないスペースがOSイメージの一部になることは望ましくありません。
だから別の解決策を試しました。解決策が見つかりました。
dd if=/dev/sdb1 of=/home/data/OS.img bs=1M count=1946 status=progress
このソリューションは1.9GBの画像を生成し、ブロックサイズを1Mと定義しているため、数は1946で、合計1.9GBが提供されます。
質問 このddコマンドが使用済みスペースのイメージのみを生成するのか、使用済みスペースと未使用スペースの両方を含む1.9GBイメージのみを生成するのかは不明です。
使用されたスペースに対してのみイメージを生成する別の方法はありますか?
答え1
この回答しましたここ。
まず、パーティションのイメージを作成します。
その後、losstupを使用して画像をマウントします。ディスクではなくパーティションなので、partscanフラグは必要ありません。
# lsblk
# losetup --find foo.img
新しく作成されたループデバイスを探す
# lsblk
loop1 7:1 0 4096M 0 loop
大きな空のファイルを作成し、残りのスペースをゼロにします。
# mount /dev/loop1 /mnt
# dd if=/dev/zero of=/mnt/filler conv=fsync bs=1M
# rm /mnt/filler
# umount /dev/loop1
それでは、画像を圧縮してみてください。
# ls -s
4096M foo.img
# gzip foo.img
# ls -s
11M foo.img.gz
これでパーティションイメージングが完了しました。
パーティションにext4ファイルシステムがある場合は、次のコマンドを使用してサイズを変更できます。2fs サイズ変更最小サイズで。これにより、すべてのデータが最初のブロックに移動されます。
e2fsck -f /dev/loop1
resize2fs -M /dev/loop1
答え2
あなたはそれを使用することができますクローン属そして、最大のファイルが圧縮されたファイルセットを含むディレクトリであるClonezillaイメージを作成します。 Clonezillaは、ファイルシステムで使用されているとマークされたパーティションのブロックだけをコピーするのに十分スマートですdd
。
ただし、ミラーの内容をパーティションに復元する場合、ターゲットは[少なくとも]同じサイズのパーティションである必要があるため、復元操作後にターゲットのサイズを小さくするには別の方法を使用する必要があります。
イメージングおよびリカバリ操作後に小さいパーティションサイズが必要な場合は、ファイルレベルで実行する必要があります。あなたはできます
ファイルシステム全体の[圧縮]tarファイルであるtarballを作成します。
必要なサイズのファイルシステムで新しいパーティションを作成します。
tarballからすべてのファイルを含むディレクトリツリーを抽出します。
別のオペレーティングシステムから起動し、コピーするパーティションを無効にし、tar
高い権限で実行します。
コピーするパーティションの最上位ディレクトリに変更
sudo tar -cvzf /path-to/file.tar.gz .
復元する場合(他のOSでも起動)
tar ファイルから抽出するパーティションの先頭にディレクトリを変更します。
sudo tar -xvf /path-to/file.tar.gz
この結果とレプリケーション操作の結果の重要な違いに注意してください。
- パーティションのUUIDは異なります。コピーされたパーティションにシステムパーティションが含まれている場合は、UUIDを元のパーティションのUUIDに変更するか、UUIDへの参照を変更して新しいUUIDと一致する必要があります
/etc/fstab
。/boot/grub/grub.cfg