MicroSDに書き込まれたOSをイメージとして保存
USBカードリーダーなどでマウントしておきます(USBポートに挿せば自動でマウントしてくれる…はず)。
df -h で確認すると以下のようになるので、これをイメージとして保存してみます。
ddコマンドを使い、イメージ名をtarget_image.imgとし、~/Publicに保存してみます。
1 2 |
cd ~/Public sudo dd bs=4M if=/dev/sda of=target_image-2.img status=progress |
途中で、読み込みエラー:入力/出力エラーなどが出たら、以下のオプションを試してみてください。
不良セクターに引っかかっている場合などで発生するようです。
conv=noerror,sync
*Windows
Win32DiskImager
イメージファイルを縮小
上記のtarget_image.imgが大きい場合、サイズを縮小してみます。
こちらのサイトで紹介されているPerlスクリプトを使ってみます。
こんな感じ。
【imageReduce.pl】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
#!/usr/bin/perl use utf8; use 5.010; use strict; #use autodie; use warnings; #use diagnostics; my $who = `whoami`; if ($who !~ /root/) { print "This should be run as root or with the sudo command.\n"; exit 1; } if (!$ARGV[0]) { print "No image file given.\n"; exit 1; } my $image = $ARGV[0]; if ($image !~ /^\//) { print "Please enter full path to image file.\n"; exit 1; } if (! -e $image) { print "$image does not exist.\n"; exit 1; } my @name = split (/\//, $image); print "\n$name[(scalar @name) - 1]:\n"; print "=" x (length ($name[(scalar @name) - 1]) + 1) . "\n"; my $info = `parted -m $image unit B print | grep ext4`; (my $num, my $start, my $old, my $dummy) = split (':', $info, 4); chop $start; chop $old; printf "Old size - %d MB (%1.2f GB)\n", int ($old / 1048576), ($old / 1073741824); my $loopback = `losetup -f --show -o $start $image`; chop $loopback; `e2fsck -p -f $loopback`; if ($? != 0) { print "There was an error in the file system that can't be automatically fixed... aborting.\n"; `losetup -d $loopback`; exit 1; } $info = `resize2fs -P $loopback 2>&1`; ($dummy, my $size) = split (': ', $info, 2); chop $size; $size = $size + 1024; `sudo resize2fs -p $loopback $size 2>&1`; sleep 1; `losetup -d $loopback`; $size = ($size * 4096) + $start; `parted $image rm $num`; `parted -s $image unit B mkpart primary $start $size`; $size = $size + 58720257; printf "New size - %d MB (%1.2f GB)\n", int ($size / 1048576), ($size / 1073741824); `truncate -s $size $image`; my $diff = $old - $size; printf "Image file was reduced by %d MB (%1.2f GB)\n", int ($diff / 1048576), ($diff / 1073741824); exit 0; |
適当な場所に保存して、権限を設定
1 |
sudo chmod 755 imageReduce.pl |
実行してみます。
1 |
sudo perl ./imageReduce.pl ~/Public/target_image.img |
30GB程度のファイルが2.6GBまで縮小されています。
MicroSDのパーティションのサイズを変更する
gpartedというパッケージを使ってみます。
Ubuntuにインストール
ソフトウェアツールを使います。
gparted で検索してインストールします。
起動して対象のSDカードを選択します。
縮小
縮小する場合は、まずマウントを解除しておく必要があります。
パーティションを選んで、右クリックしてアンマウントを選択
パーティションを選んで、右クリックしてリサイズを選択
マニュアルで入力してもいいですが、ここはスライドバーを使ってみます。
適当な値を設定して、右下の「リサイズ/移動」ボタンをクリック。
この段階では未だ完了していません。
メニュの「編集」->「保留中の全ての操作を適用する」を選択。
「適用してもよろしいですか?」と出たら「適用」をクリック
操作が完了したら終了です。
こんな感じ。
拡大
基本的な操作手順は縮小と同じです。
違うのは、アンマウントが必要ないところです。
Story
どういう場合に使う?
例えば、用意されているOSのイメージファイルをダウンロードして、さて焼こうか!と思ってMiceoSDを準備してみると、想定外にユーザー領域が小さくて焼けない!
1:まずイメージを縮小します
2;縮小したイメージでMicroSDに焼きます。でも、使用できる領域はいきなり少ないです
3:MicroSDのパーティションサイズを拡大します
Leave a Reply