ディスクのイメージを取得し、ルート(バイオニック)ファイルシステムパーティションを縮小し、イメージを切り捨てて空き領域になった部分を削除することに関する多くの情報。いいね https://softwarebakery.com//shrinking-images-on-linux
したがって、基本的に3つのステップがあります。 resize2fsを使用してパーティション上のファイルシステムを縮小し、次にパーティションのサイズも小さくします。次に、イメージファイル内の未使用のスペースを最後に削除します。
それは私が問題を抱えている第三部です。イメージファイル内のGPTパーティションテーブルがゴミ箱に入れられたかのように、私がddまたは切り捨てを試みるたびに、イメージのすべてのパーティションが削除されます。
これが元の画像です
GPT fdisk (gdisk) version 1.0.3
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Disk rock64-base.img: 30310400 sectors, 14.5 GiB
Sector size (logical): 512 bytes
Disk identifier (GUID): 159DCEDE-DBEA-4657-96D9-2CE178A96B7E
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 30310366
Partitions will be aligned on 64-sector boundaries
Total free space is 30 sectors (15.0 KiB)
Number Start (sector) End (sector) Size Code Name
1 64 8063 3.9 MiB 8300 loader1
2 8064 8191 64.0 KiB 8300 reserved1
3 8192 16383 4.0 MiB 8300 reserved2
4 16384 24575 4.0 MiB 8300 loader2
5 24576 32767 4.0 MiB 8300 atf
6 32768 262143 112.0 MiB 0700 boot
7 262144 30310366 14.3 GiB 8300 root
その後、最初の2つのステップの後
Found valid GPT with protective MBR; using GPT.
Disk test.img: 30310400 sectors, 14.5 GiB
Sector size (logical): 512 bytes
Disk identifier (GUID): 159DCEDE-DBEA-4657-96D9-2CE178A96B7E
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 30310366
Partitions will be aligned on 64-sector boundaries
Total free space is 23555002 sectors (11.2 GiB)
Number Start (sector) End (sector) Size Code Name
1 64 8063 3.9 MiB 8300 loader1
2 8064 8191 64.0 KiB 8300 reserved1
3 8192 16383 4.0 MiB 8300 reserved2
4 16384 24575 4.0 MiB 8300 loader2
5 24576 32767 4.0 MiB 8300 atf
6 32768 262143 112.0 MiB 0700 boot
7 262144 6755394 3.1 GiB 8300 primary
ルートファイルシステムのパーティションが3.1Gに減少したことがわかります
その画像をうまく読み込むことができます。 SDカードに戻し、デバイスを起動できます。したがって、ステップ1と2は問題ありません。
今...
`truncate --size = $ [(6755394 + 1)* 512] 'test.img'を実行してプロセスを完了した場合
そして
GPT fdisk (gdisk) version 1.0.3
Warning! Disk size is smaller than the main header indicates! Loading
secondary header from the last sector of the disk! You should use 'v' to
verify disk integrity, and perhaps options on the experts' menu to repair
the disk.
Caution: invalid backup GPT header, but valid main header; regenerating
backup header from main header.
Warning! Error 25 reading partition table for CRC check!
Warning! One or more CRCs don't match. You should repair the disk!
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: damaged
****************************************************************************
Caution: Found protective or hybrid MBR and corrupt GPT. Using GPT, but disk
verification and recovery are STRONGLY recommended.
****************************************************************************
Disk test2.img: 6755395 sectors, 3.2 GiB
Sector size (logical): 512 bytes
Disk identifier (GUID): 159DCEDE-DBEA-4657-96D9-2CE178A96B7E
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 30310366
Partitions will be aligned on 64-sector boundaries
Total free space is 23555002 sectors (11.2 GiB)
Number Start (sector) End (sector) Size Code Name
1 64 8063 3.9 MiB 8300 loader1
2 8064 8191 64.0 KiB 8300 reserved1
3 8192 16383 4.0 MiB 8300 reserved2
4 16384 24575 4.0 MiB 8300 loader2
5 24576 32767 4.0 MiB 8300 atf
6 32768 262143 112.0 MiB 0700 boot
7 262144 6755394 3.1 GiB 8300 primary
明らかにトランケート(またはその点ではdd)はGPTでうまく機能しません。このファイルでgdiskを実行すると、gptがゴミ箱に移動したことが確認されます
切り捨てられたファイルに対してgdiskを実行すると、GPTが壊れていると報告されます。
だから私はここに何かが欠けています。どうやらディスクファイルの末尾が変更されると、GPTが破損するか、修正する必要があります(不一致)。手順2の最後で問題ありませんが、gdiskをいじって修復できませんでした。その上、スクリプトで実行できる解決策が必要でしたが、このGPTでは機能しません。
つまり、これはGPTなので、切り捨てやdd以外のものを使用する必要がありますか、それとも切り捨て後に手動でGPTを「修正」する必要がありますか。
Gdisk検証レポートは次のとおりです
Caution: The CRC for the backup partition table is invalid. This table may
be corrupt. This program will automatically create a new backup partition
table when you save your partitions.
Problem: The secondary header's self-pointer indicates that it doesn't reside
at the end of the disk. If you've added a disk to a RAID array, use the 'e'
option on the experts' menu to adjust the secondary header's and partition
table's locations.
Problem: Disk is too small to hold all the data!
(Disk size is 6755395 sectors, needs to be 30310400 sectors.)
The 'e' option on the experts' menu may fix this problem.
Problem: GPT claims the disk is larger than it is! (Claimed last usable
sector is 30310366, but backup header is at
30310399 and disk size is 6755395 sectors.
The 'e' option on the experts' menu will probably fix this problem
Partition(s) in the protective MBR are too big for the disk! Creating a
fresh protective or hybrid MBR is recommended.
GPTには、ディスクの先頭にあるメインパーティションテーブルと、ディスクの末尾にあるバックアップパーティションテーブルの両方が含まれています。 (文字通り、ディスクの終わり-ディスクの最後のいくつかのセクター。)したがって、ディスクイメージを切り捨てると、バックアップパーティションテーブルが削除されます。さらに、メインパーティションテーブル内のポインターとメタデータの一部は、(仮想)ディスクの終わりを過ぎているため、無効になりました。これがv
のgdisk
コマンドが不満を言っていたことのほとんどです。
これは、ディスクが完全にゴミ箱に入れられたことを意味しません。メインパーティションテーブルのデータが有効である限り、gdisk
(および他のほとんどのGPTパーティションツール)は回復できます。 gdisk
では、x
と入力してエキスパートのメニューに入り、次にe
と入力してバックアップパーティションテーブルデータをディスクの新しい端に移動し、次のように入力します。 w
変更をディスクに書き込みます。 (別の問題を見落とした場合に備えて、v
の前にw
をもう一度入力することをお勧めします。また、以下を参照してください。..)
ただし、もう1つの問題があることに注意してください。gdisk
によると、ディスクイメージのサイズは6,755,395セクターです。しかし、最後のパーティションの最終セクターはセクター6,755,394です。これでは、バックアップパーティションテーブルに十分なスペースが残りません(デフォルトでは33セクターを消費します)。プロセス全体を再実行できる場合は、ディスクイメージを少しだけ縮小する必要があります。そうでない場合は、gdisk
を使用してバックアップパーティションテーブルを再作成する前に、ディスクイメージを33 * 512(16,896)バイト拡張してみてください。