web-dev-qa-db-ja.com

ファイルシステムをより小さなデバイスにコピーする方法

32 GB SDカード(13 GiB使用済み))を16 GB SDカードにコピーするために使用したので、以下のプロセスを共有します(Raspberry Pi用でした):/dev/loop0で何度か失われました...

1
shrd

コピーする最初のSDカードに2つのマウントされていないパーティション/ dev/mmcblk0p1(boot fat16、100 MiB)と/ dev/mmcblk0p2(ext4、〜31,9 GB)があると仮定します。

  1. パーティションをファイルにコピーする:

    Sudo dd bs=1M if=/dev/mmcblk0p1 of=/home/pi/file_part1 status=progress
    Sudo dd bs=1M if=/dev/mmcblk0p2 of=/home/pi/file_part2 status=progress
    
  2. パーティションのサイズを変更する

    最初のパーティションはブートです。サイズを変更する必要はありません。パーティションext4をe2fsckで確認してください(resize2fsの前に実行する必要があります)。

    Sudo e2fsck /home/pi/file_part2 
    Sudo resize2fs /home/pi/file_part2 14G
    

    14Gを選択すると、ファイルシステムで13GiBが使用されます。ファイルシステムの使用量が少ない場合は、より少ない数を選択してください)。

    ファイルfile_part2のサイズが14 GiB(32 GBではない)になったことを確認します

    注意withgibibytes(2 ^ 30)andgigabytes(10 ^ 9)、それは大きな違いを生む可能性があります:

    たとえば、「16 GB」SDカード(16 000 000 000バイト)SDカード用に15 GiBファイルシステム(15 * 2 ^ 30バイト= 16 492 674 416 640バイト)がある場合、収まりません...

  3. 2枚目のSDカードにパーティションテーブルを再作成します

    2番目のSDカードにfdiskまたは他のツールを使用して、たとえばRaspberry Pi4にarchlinuxをインストールするマニュアルを使用して、パーティションテーブルを再作成します。 https:/ /archlinuxarm.org/platforms/armv8/broadcom/raspberry-pi-4

    note:最初のSDカードの/dev/mmcblk0の最初の200Mを2番目のカードにコピーする際にddでチートすることもできますパーティションテーブルを再作成するためのSDカード(ちなみにブートパーティション)。

  4. 2番目のSDカード(16 GB)のパーティションにファイルをコピーする

    Sudo dd bs=1M if=/home/pi/file_part1 of=/dev/mmcblk0p1 status=progress
    Sudo dd bs=1M if=/home/pi/file_part2 of=/dev/mmcblk0p2 status=progress
    
  5. (Raspberry Piで)新しいSDカードを起動する前に、/dev/mmcblk0p2をマウントしてファイル(/etc/fstabなど)を変更します

2
shrd