最後にパーティション分割されていないスペースを含む16Gbカードの画像:切り捨て可能ですか?


18

友達のためにディストリビューションを準備したかった。
他に何も置かれていないので、16Gb SDカードを使用しました。

デフォルトのDebian Weezy 2Gbイメージから始めて、サイズ変更はしませんでした。
今、私がやったように、私がやったことのイメージを作成したかったのですが、最後に14Gbの非パーティション(パーティション化されていない空き) スペースを含む16Gbファイルを取得しました。

[Windows // Win32DiskImagerを使用しました。今はrPIに固執する自由がないので]

パーティション化されたスペースのすぐ後ろで画像ファイルを切り捨てて、先頭部分を小さなカードに転送することはできますか?


2
Linuxコンピューターにアクセスできる場合は、を実行してdd if=/dev/path/to/SD/card of=~/SpecialImage.imgからGPartedをインストールして実行しgparted ~/SpecialImage.imgます。GPartedが.imgファイルを開いたら、お好みに合わせてパーティションのサイズを変更するだけです!(両方のコマンドはルートとして実行sudo suする必要があり、必要なものを取得する必要があります。に$切り替えると、#ルートになります。これはLinuxの神に相当するものです。)必要なツール。GPartedを使用すると、すべてが非常に単純になり、成功する可能性が高くなります。
ジェームズTheAwesomeDude

Pleseは私の質問を注意深く読んだ。
ニッピー

はい、あなたの質問を読みましたが、ディスクイメージを切り捨てるだけでは危険だと言えます。もちろん、画像の最後のバイトだけを切り取ることができますが、特にLinuxが意図的にファイルを間引きするため、誤ってファイルを切り離さないという保証はありません。さらに、ファイルシステムの末尾に重要なメタデータなどが存在する場合があります。適切にファイルシステムのサイズ変更ユーティリティを使用する方が、ファイルの終わりを自分で切り落とそうとするよりも全体的に安全です。
JamesTheAwesomeDude

1
さて、しかし、私はパーティション分割されていないスペースについて話しています。Linuxでさえ、パーティション化されていないとしてマークされたデータをディスクスペースに配置しませんが、パーティションテーブルに書き込まれたブロック内に留まります。私の懸念は、画像ファイル形式に起因していました。画像ファイルのメタデータがファイルの最後にある可能性があるため、ファイル情報を切り離すことが心配でした。(私の以前のコメントがあまりにも難しく聞こえないことを願っています; sry)
Nippey

ああ、私はあなたが今言っていることを得る。破損した末尾の空き領域が心配な場合は、切り捨てた後、画像でGPartedを実行します。おそらく最後の領域を「未割り当て」または「破損」としてリストします-そのスペースに新しい「未フォーマット」パーティションを作成します。その後、問題は発生しません。:)
JamesTheAwesomeDude

回答:


33

私はついに私の質問を説明しているリソースを見つけました。

http://softwarebakery.com/shrinking-images-on-linux

ショート:

はい、切り捨てが可能です!

プロセスの要約:

を使用してイメージからパーティション情報を抽出しfdiskます。

$ fdisk -lu image.img
Disk image.img: 4096 MB, 4096000000 bytes, 8000000 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
Disk identifier: 0x000a1bc7

      Device Boot      Start         End      Blocks   Id  System
image.img1              2048     5872026     5869978    b  W95 FAT32

パーティションのサイズは約2,8Gb(5872026 * 512)で、残りはパーティション化されていません。

そのため、パーティションの終了後はすべて削除できます。
これはツールで行いますtruncate。ブロック番号は0から始まるため、セクターの数に1を追加することを忘れないでください。

$ truncate --size=$[(5872026+1)*512] image.img


編集:

Linuxへ切り替えるのが面倒という方のために:
またしてWindows上で動作するのCygwinさんfdisk.exetruncate.exe

Cygwinとは何ですか?

引用するかもしれません:「Cygwin:そのLinuxの感覚を-Windowsで」(https://www.cygwin.com/)。
Windowsで実行できる実行可能ファイルのセットですが、Linuxで通常知っているすべてのコマンドラインプログラムを提供します。インストール中にすべてのパッケージを選択すると、Cygwinのインストールに非常に時間がかかる場合がありますが、この例に従うには、デフォルトの構成に加えて、パッケージutil-linux(fdisk)およびcoreutils(truncate)も選択されていることを確認してください。
ご使用の環境に応じて、男の必要性は、追加する/usr/bin/usr/sbin、あなたをします$PATH


1
取得するにはどのパッケージをインストールする必要がfdisk.exeありtruncate.exeますか?
PythonNut

1
こんにちは@PythonNut、私は上記の私の答えを更新し、必要なパッケージを追加します。oを)
Nippey

使用するパーティションが少ない場合でも、パーティションにディスクのサイズがある場合はどうなりますか?
piegames

5

私はこれが古い質問ですけど、私はそれはのように簡単ではありませんので、Mac上でこのプロセスを行う方法を示したいと思います:fdisk持っていない-lオプションを、そしてtruncateデフォルトではインストールされません。

1.ステップ1:Mac OS Xにtruncateをインストールします。

これにはMacPortsまたはHomebrewが必要です。私はMacPortsを使用しています。これらのいずれかを持っていない場合は、先にそれらをインストールしてください。MacPortsへのリンク

これで、truncateをインストールできます。ターミナルを開き、次を入力します。

sudo port install truncate

Brewインストールの場合:

brew install truncate

これでうまくいくはずです。

2.ディスクユーティリティを使用してIMGをマウントし、diskutilターミナルコマンドから見えるようにします。

このステップが必要な理由はすぐにわかります。ディスクユーティリティアプリを開きます。[ ファイル] (トップバー) -> [ディスクイメージ開く]をクリックし、IMGファイルを選択します。

3. IMGのパーティションサイズとマウント先を確認します。

ターミナルで、次を入力します。

diskutil list

そして、最終的にどこかに、このようなものが表示されるはずです:

/dev/disk3 (disk image):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        +16.0 GB    disk3
   1:             Windows_FAT_32 boot                    62.9 MB    disk3s1
   2:                      Linux                         3.9 GB     disk3s2

したがって、約12GBがパーティション分割されていないことがわかります。それらを切り捨てる必要があります。

このコマンドが必要な理由は、ディスクイメージがマウントされている場所をチェックアウトするためです。私の場合、/ dev / disk3の下にあります

4.実際のパーティションサイズを確認します。

3.9 GBおよび62.9 MBは、切り捨てでは機能しない値です。パーティションサイズをバイト単位で見つける必要があります。

5. fdiskを実行します。

ターミナルで、次のコマンドを実行します。

   fdisk /dev/diskX

どこでXは、前の手順で実施された数です。これにより、次のようになります。

         Starting       Ending
 #: id  cyl  hd sec -  cyl  hd sec [     start -       size]
------------------------------------------------------------------------
 1: 0C    0 130   3 -    8  40  32 [      8192 -     122880] Win95 FAT32L
 2: 83    8  40  33 -  478  79  49 [    131072 -    7553024] Linux files*
 3: 00    0   0   0 -    0   0   0 [         0 -          0] unused      
 4: 00    0   0   0 -    0   0   0 [         0 -          0] unused      

6. 切り捨てる時間!

ターミナルで、cdイメージがあるディレクトリに移動します。次に、以下を記述します。

truncate FILE SIZE

FILEはもちろんあなたのファイルです。

SIZEはバイト単位のサイズです。私がしたことは、コマンドのサイズ列に開始列を追加し、512を掛けることです。したがって、私の場合、SIZEは512 *(7553024 + 131072)= 3934257152で、約3.9 GBです。fdisk

あなたは必要になります開始サイズ最後のパーティションによって示されていますfdisk。(必ずしも最大ではありませんが、IMGファイルの最後にあります)

少し実験して、7553024 * 512または(7553024 + 1)* 512バイトを入力すると、IMGファイルが破損しました。ですから、念のため、上記のとおりに行ってください。実際に必要なものよりも多く追加される可能性がありますが、安全なオプションです。

7.(オプション)IMGが破損していないか簡単にテストします。

ディスクユーティリティをもう一度開き、以前と同じように新しいIMGファイルを開きます。マウントされている場合、新しい(より小さい)サイズも確認できます。マウントされない場合、何かがおかしかった。(truncateコマンドでサイズを増やしてみてください)

これは最良のテストではありませんが、新しいIMGが破損しているかどうかを確認する確実な方法です。だから、実際にはそれを当てにしてはいけませんが、試してみる価値はあります...

誰かがこれが役立つことを願っています!


1
良いですね!知識を広げてくれてありがとう:)あなたが指摘したこと512*(Size+1)は、うまくいきません。ご覧のとおり、複数のパーティションがある場合は両方のパーティションを保持する必要があるため、を使用しましたがEnd、ではありませんSize。したがって、7553024 + 131072+1)を使用することは100%正しいです!
ニッピー

1

最近のWin32DiskImagerには、実際には、割り当てられたパーティションのみをディスクイメージに含めるオプションがあります。これにより、ワンクリックでトリミングが行われます。

ここに画像の説明を入力してください


すばらしい、Windowsでずっと簡単になります!
ニッペイ

0

展開のためにRPIイメージをバックアップするためにこのWin32diskimg操作の多くを行うときに、最近気づいたことです。最近、SDの「トリミング」fstrimのテストを開始して、理論的なウェアレベリングに使用されていないSDカードの部分をクリーニングしました。その効果については定かではありませんが、1つの副作用として、16GB SDパーティションのイメージを作成し、7zipを使用して圧縮したことがあります。通常の16GBから9.5GBに、現在は2.5GBのファイルに変更しました。私は今、何も間違っていないことを確認するためにテストしていますが、TRIMを使用して未使用のスペースを0としてマークすると、イメージの圧縮がはるかに効率的になります(これは理にかなっています)。これを報告したかったのは、非常に簡単で、複数のステップはありませんでした。


間違いではありませんが、実際には問題に対処していません。
RalfFriedl
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.