目次: ROCK64/ROCKPro64
ROCK64のカーネルを入れ替えていたら、動かないカーネルを書き込んでしまい、起動しなくなってしまいました。
Etcherを使えばSDカードを全て書き換え、起動可能な状態に戻すことができるものの、今までの作業や変更が全て消えてしまいます。
SDカード全書き換えはやりたくありません。なんとかカーネル「だけ」復旧できないでしょうか?
Etcherのイメージファイルからカーネルだけ取り出して、上書きすれば復活するはずです。
Etcherの設定を変えていなければ、ダウンロードしたイメージファイルは、ユーザディレクトリのAppData\Roaming\pine64-installer\downloadedImageにあると思います。私はDebian Mateを使っていたので、files.pine64.org_stretch-mate-rock64-0.5.15-136-20171222-arm64.img.xzというイメージファイル名でした。これをLinuxマシンにコピーします。
$ unxz files.pine64.org_stretch-mate-rock64-0.5.15-136-20171222-arm64.img.xz $ ls files.pine64.org_stretch-mate-rock64-0.5.15-136-20171222-arm64.img # partx -v -a files.pine64.org_stretch-mate-rock64-0.5.15-136-20171222-arm64.img partition: none, disk: files.pine64.org_stretch-mate-rock64-0.5.15-136-20171222-arm64.img, lower: 0, upper: 0 Trying to use '/dev/loop0' for the loop device /dev/loop0: partition table type 'gpt' detected range recount: max partno=7, lower=0, upper=0 /dev/loop0: partition #1 added /dev/loop0: partition #2 added /dev/loop0: partition #3 added /dev/loop0: partition #4 added /dev/loop0: partition #5 added /dev/loop0: partition #6 added /dev/loop0: partition #7 added
圧縮されているのでunxzで展開し、partx -aにてディスクイメージ内の全パーティションをloopbackデバイスに登録(※)しています。
ここまでくればHDDと同じようにマウントできます。
# mount /dev/loop0p6 rock64_boot # ls -la rock64_boot/ total 41654 drwxr-xr-x 3 root root 16384 Jan 1 1970 . drwxr-xr-x 3 katsuhiro katsuhiro 4096 Sep 4 01:15 .. -rwxr-xr-x 1 root root 18606088 Dec 21 2017 Image -rwxr-xr-x 1 root root 18606088 Dec 21 2017 Image.bak -rwxr-xr-x 1 root root 42707 Dec 21 2017 dtb -rwxr-xr-x 1 root root 42707 Dec 21 2017 dtb.bak drwxr-xr-x 2 root root 2048 Oct 12 2017 extlinux -rwxr-xr-x 1 root root 2663325 Dec 21 2017 initrd.img -rwxr-xr-x 1 root root 2663386 Dec 21 2017 initrd.img.bak
ブート用のパーティションは6番目なので /dev/loop0p6をマウントしています。あとは欲しいファイルをコピーすればOK。
# umount /dev/loop0p6 # ls /dev/loop* /dev/loop-control /dev/loop0p3 /dev/loop0p7 /dev/loop4 /dev/loop0 /dev/loop0p4 /dev/loop1 /dev/loop5 /dev/loop0p1 /dev/loop0p5 /dev/loop2 /dev/loop6 /dev/loop0p2 /dev/loop0p6 /dev/loop3 /dev/loop7 # partx -v -d /dev/loop0 partition: none, disk: /dev/loop0, lower: 0, upper: 0 /dev/loop0: partition #1 removed /dev/loop0: partition #2 removed /dev/loop0: partition #3 removed /dev/loop0: partition #4 removed /dev/loop0: partition #5 removed /dev/loop0: partition #6 removed /dev/loop0: partition #7 removed # ls /dev/loop* /dev/loop-control /dev/loop1 /dev/loop3 /dev/loop5 /dev/loop7 /dev/loop0 /dev/loop2 /dev/loop4 /dev/loop6 # losetup -l NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO LOG-SEC /dev/loop0 0 0 0 0 /home/katsuhiro/share/rock64/files.pine64.org_stretch-mate-rock64-0.5.15-136-20171222-arm64.img 0 512 # losetup -d /dev/loop0 # losetup -l
マウント時と同様にpartx -dでパーティションの登録を解除できます。しかしなぜか /dev/loop0の登録だけが残ります。気にせずlosetup -dで登録を解除すれば特に問題ないようですが、何かやり方が間違っているのかな?うーん…??
(※)losetupと /dev/loop0のみでも、オフセットを指定するとか何とかして、頑張ればループバックマウントはできると思いますが、ディスクイメージにパーティションが複数含まれている場合はpartxを使った方が楽だと思います。
< | 2018 | > | ||||
<< | < | 09 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | - | - | - | - | - | 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 | - | - | - | - | - | - |
合計:
本日:
管理者: Katsuhiro Suzuki(katsuhiro( a t )katsuster.net)
This is Simple Diary 1.0
Copyright(C) Katsuhiro Suzuki 2006-2023.
Powered by PHP 8.2.15.
using GD bundled (2.1.0 compatible)(png support.)