ディスクイメージの縮小方法(for Linux)

SDカードいっぱいにパーティションが作成されている場合、データが無い部分も含まれていて、そのままイメージ化すると無駄が多い。
そこで、データが記録されている部分だけにパーティションを縮小してイメージ化する方法をまとめた。

パーティション縮小したいSDカードをマウントする。~

通常、/bootと/の2つがパーティションされているので、USBカードリーダーでつなげて第2パーティションを/mnt/usbあたりにマウント。
その状態から使用量を調べて、アンマウントして、縮小の作業を行う。

ストレージのサイズ変更(縮小)

以下は別PC(Linux専用機)のFedoraでの作業

概要:(容量は例) 第2パーティションの使用量は3.5GB。(dfコマンドで確認する)
目標パーティションサイズを4GBとする。(少し余裕を残さないと後で困る)
resize2fsで縮小するサイズは3.8GBとする。(目標より少なめに)

e2fsck -f /dev/sdd2
チェックする(必須)

resize2fs -p /dev/sdd2 3800M
目標パーティションサイズより少し少なくする
指定サイズが小さすぎて縮小が無理だとエラーがでる

fdisk /dev/sdd
pコマンドで第2パーティションの開始シリンダを確認してメモする
dコマンドで第2パーティションを削除する
pコマンドで状態を確認する
nコマンドで新しいパーティションを作る(開始シリンダに注意=先ほどのメモを参照)
 容量指定は目標サイズ指定の「+4000M」で
pコマンドで状態を確認する
wコマンドで書き込む

これで、パーティションサイズ4000MBに変更される。
ただし、論理サイズは先に縮小した3800MBのまま。
これを次の操作でパーティションサイズと合致させる。

ストレージのサイズ変更(最大に拡張)

resize2fs -p /dev/sdd2
サイズ指定をしなければ、ファイルシステムはパーティションサイズまで自動で拡張される

SDカードからイメージを作成

SDカードに作成した状態から、最小限のサイズだけイメージ化する。
例えば、8GBのカードに最小構成を作成して上記パーティションの縮小作業をして2GBまで切り詰めたとする。
これをそのままddやWin32DiskImage?でイメージ化すると、8GBカードの後半6GBもゴミデータとしてファイルに書き出されてしまう。

  • ストレージのサイズ変更(縮小)の作業を行って、パーティションサイズを少し余裕を持たせて最小にする。
  • 別のLinux機にカードを接続する(ここでは/dev/sddに乗ったとする)
  • 自動マウントされた場合はアンマウントする
  • fdisk /dev/sdd でパーティションの最終セクタを確認する
    # fdisk /dev/sdd
    Welcome to fdisk (util-linux 2.23.2).
    
    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.
    
    
    Command (m for help): p
    
    Disk /dev/sdd: 7948 MB, 7948206080 bytes, 15523840 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 label type: dos
    Disk identifier: 0xf8e23f7b
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdd1            8192       92159       41984    c  W95 FAT32 (LBA)
    /dev/sdd2           92160     4140072     2023956+  83  Linux
    
    Command (m for help): q
  • 最終セクタは4140072と分かった。これに1足して4140073とする。
  • 次に、dd コマンドでファイル化する
    dd if=/dev/sdd of=raspbian_pifw.img bs=512 count=4140073

こうしてやれば、出来上がったイメージを4GBを超えるカードに展開することができる。
もし4GBのカードに展開したければ、2つのパーティションのトータルサイズが4000MBより少なくなるようにそれぞれのサイズを計算して実行する。
例では4GBのSDカードには入らないので注意。(今なら8GBか16GBを使うと思おうけど)


添付ファイル: fileworking_log.txt 69件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-12-02 (日) 10:41:38 (228d)