私のように無駄に64GBに焼いて、16GBとかに焼き直したい・・・という時にファイルサイズを縮小させますが、その後に起こる注意点など・・・
縮小させる方法は、色々なブログでも紹介されている通り以下のリンク先を参照です
https://www.raspberrypi.org/forums/viewtopic.php?f=91&t=58069
とりあえず、以下の内容を丸コピします
#!/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;
内容は理解しなくても大丈夫です。これをresizeimage.plというファイル名で保存します
次に、Raspberry piに外付けHDDを取り付けてマウントさせます
とりあえず、dfでデバイスをチェックします
赤枠の部分を見ると、/dev/sdb1となっているのがHDDです
その下を見ると、/dev/sda1というのがいると思います。これは先に繋いでおいたUSBメモリを認識しています
つまり、繋がった順番毎に割り当てられていくという感じですので、何も事前に繋いでいなければ、通常は/dev/sda1です
とりあえず、/dev/sda1という事にして解説を進めます
先にマウント先のフォルダを作成します
$ sudo mkdir /mnt/hdd
続いてマウントします
$ sudo mount /dev/sda1 /mnt/hdd
これで、先ほど/dev/sda1として認識されていたHDDが、/mnt/hddのフォルダで読み込めるようになりました
先ほど作成したresizeimage.plファイルを/mnt/hddにコピーしましょう
コピー方法は色々とありますが、私はWinSCPを使ってネットワーク越しにコピーします
なので、/mnt/hddを誰でもファイルが書き込めるようにします
$ sudo chmod 777 /mnt/hdd
これで誰でもHDDに書き込めます。本来はセキュリティ的にあんまりやりたくない奴です
ここからはWinSCPを使ってファイルをコピーします。コピーはresizeimage.plと、事前に用意してあるであろう、Raspberry Piのimgファイルです
書くの疲れてきたので、こちらをご参照ください
なお、コピー先は/mnt/hddに両方コピーしてくださいね
コピーが完了したら次に進みます。ちゃんとコピーされてるかを確認する為にフォルダの中を確認します
$ cd /mnt/hdd
$ ls
これでresizeimage.plが表示されていれば、OKです。次に進みます
以下のコマンドを実行します。Raspberry piのimgファイル名までは、フルパスで書いてください
$ sudo perl ./resizeimage.pl /mnt/hdd/RasberryPiのimgファイル名
実行すると、圧縮が始まります
同じファイル名の物が作成され、ファイルサイズが小さくなっているはずです
ここからが本題!
という長い前置きを経て、私が経験した注意点を以下羅列・・・
全て容量圧縮後に発生しています
・Softether VPNの設定が一部消えた(管理ソフトから接続に行く際、992ポートを使うようにしていたはずが、SSL(443ポート)で勝手に接続するようになった)→992ポートに接続するように再設定して解決
・上記のせいでnginxが起動しなかった(既に443ポートは別のアプリで使われてますのエラーを吐いていた)→上記の設定変更により解決
・縮小後は容量が凄くギリギリになるので、Mysqlが正しく起動しなかった→新しいMicroSDカードの領域に合わせて容量を拡張したら解決
というわけなので、縮小後にいつも動いてた設定が動かない!でも慌てず騒がず、一旦容量を拡張して再起動してみましょう
Softetherについては、バグだと思うけど・・・