EFIブートのgrubの項目を復旧したい

なにかの拍子にEFIブートのgrubの項目が消えてしまった。 復旧方法を調査中。うまくいっていないようなので、あくまでメモとして残しておく。

1. Linuxで復旧

grubが起動できないので、当然ながら対象のLinuxも起動できない。 なので、USBライブメディアLinuxを起動し、chrootでインストール済の環境に入ってgrubを復旧する。

インストール済のLinuxに関連するパーティション、具体的には/, /boot/, /boot/efiなどをマウントしておく。

chroot環境を準備する。

mkdir chroot
sudo mount --bind /media/root ./chroot
sudo mount --bind /media/boot ./chroot/boot
sudo mount --bind /media/esp ./chroot/boot/efi
sudo mount --bind /proc ./proc
sudo mount --bind /dev ./dev
sudo mount --bind /dev/pts ./dev/pts
sudo mount --bind /sys ./sys
sudo mount --bind /sys/firmware/efi/efivars ./chroot/sys/firmware/efi/efivars

chroot環境でgrubをインストールする

sudo chroot ./chroot /bin/bash --login -i
grub-install /dev/nvme0n1 # ディスク名は適宜変更
exit

以上。

ただし、当方のマシンではなぜかこれをしても、項目が消えてしまった。原因不詳。

2. Windowsで復旧

Windowsのbcdeditで復旧する。

管理者権限でターミナルを起動。

EFIブートの項目を列挙

bcdedit /enum firmware /v

descriptionがWindows Boot Managerとなっているものの、identifierを確認し、メモする。

この項目をコピーする。

bcdedit /copy {identifier} /d "Ubuntu"

注:powershellの場合はbcdeditの直後に--%を追加してbcdedit --% /copy ...とする。

再びEFIブートの項目を列挙

bcdedit /enum firmware /v

descriptionがUbuntuとなっているものの、identifierを確認し、メモする。

この項目のefiファイルをgrubに変更する。

bcdedit /set {identifier} path \EFI\ubuntu\grubx64.efi

Box Driveでマクロ付きExcelを開いたときにマクロ有効にする

「インターネットオプション」を開く(inetcpl.cpl
「セキュリティタブ」の「信頼済サイト」を開き、「サイト」をクリック

「信頼済サイト」ウィンドウの「このWebサイトをゾーンに追加する」に"https://api.box.com/"を記入し、「追加」をクリックし、「閉じる」をクリック

Google Chromeのリーディングリストを一括でブックマークに変換する方法

本記事はChatGPTが作成した文章をベースとしています。

Google Chromeのリーディングリストを整理したいと考えている方に向けて、今回はリーディングリストを一括でブックマークに変換する方法をご紹介します。この手順を利用すれば、個別にブックマークを作成する手間を省くことができます。

ステップ1: Google Takeoutを利用してリーディングリストをエクスポートする

まずは、Google Takeoutを利用してリーディングリストをエクスポートします。

  1. Google Takeout にアクセスします。
  2. 「データの選択」セクションで、「すべて選択を解除」をクリックします。
  3. 下にスクロールして「Chrome」を選択します。
  4. Chromeのすべてのデータが含まれます」をクリックします。
  5. 「リーディングリスト」のみを選択し、OKをクリックします。
  6. ページ下部の「次のステップ」をクリックします。
  7. エクスポート形式やデリバリー方法を選択し、「エクスポートを作成」をクリックします。

ステップ2: エクスポートされたデータをダウンロードする

Googleがエクスポートを完了すると、ダウンロードリンクが表示されます。以下の手順でファイルをダウンロードしてください。

  1. Googleからの通知メールを開き、リンクをクリックします。
  2. 「ダウンロード」ボタンをクリックして、データを保存します。

ステップ3: 圧縮ファイルを解凍し、HTMLファイルを取得する

ダウンロードした圧縮ファイルを解凍して、リーディングリストが含まれているHTMLファイルを取得します。

  1. 圧縮ファイルを右クリックし、「すべて展開」を選択します。
  2. 解凍されたフォルダ内にあるリーディングリストの情報を含むHTMLファイルを確認します。

ステップ4: Google Chromeにインポートする

最後に、取得したHTMLファイルをGoogle Chromeにインポートして、リーディングリストをブックマークとして保存します。

  1. Chromeを開き、右上の3点メニューをクリックします。
  2. 「ブックマーク」 > 「ブックマークと設定をインポート」を選択します。
  3. 「HTMLファイルからインポート」を選び、先ほど取得したHTMLファイルを選択します。
  4. 「開く」をクリックすると、リーディングリストのアイテムがすべてブックマークに変換されます。

以上で、Google Chromeのリーディングリストを一括でブックマークに変換する作業は完了です。この方法を活用して、効率的にリーディングリストを整理してください。

参考

LinuxのLiveUSBにmemtest86+を追加する

RufusUbuntuのLive USBを作成してある前提で、そのgrub起動メニューにmemtest86+を追加する。

項目
メディア Ubuntu 24.04 x86_64
Live USB作成方法 Rufus ISOモード

Rufus ISOモードだと、USBにFATパーティションが作られ、その中にファイルとしてUbuntu起動のためのデータやgrubのデータがおかれる。

ちなみに、EFI bootではなくMBRブートならメニューに Test memory と表示されるので、これを使えばよい。

一番簡単な方法

USB内の /boot/grub/grub.cfg を開くと、

if [ "$grub_platform" = "efi" ]; then
(省略)
else
menuentry 'Test memory' {
    linux16 /boot/memtest86+x64.bin
}

とある。この Test memoryEFIの場合にも表示するようにすればよい。 linux16 では起動できないようなので、 linux として、

if [ "$grub_platform" = "efi" ]; then
(省略)
menuentry 'Test memory' {
    linux /boot/memtest86+x64.bin
}
else
menuentry 'Test memory' {
    linux16 /boot/memtest86+x64.bin
}

というように、追記した。

公式サイトのバイナリを使う

公式サイト Memtest86+ | The Open-Source Memory Testing Tool からダウンロードしてくる。
ダウンロードするものは Binary Files (.bin/.efi) を選択する。
執筆時点ではこのリンクだった。
mt86plus_7.00.binaries.zip

圧縮ファイル内にある memtest64.efi を、USB内に配置する。ここでは例えば /boot/memtest_efi とする。

次に /boot/grub/grub.cfg を開き、下記内容を追記する。

menuentry "Start Memtest86+, use built-in support for USB keyboards" {
    linux /boot/memtest_efi keyboard=both
}
menuentry "Start Memtest86+, use BIOS legacy emulation for USB keyboards" {
    linux /boot/memtest_efi keyboard=legacy
}
menuentry "Start Memtest86+, disable SMP and memory identification" {
    linux /boot/memtest_efi nosmp nosm nobench
}

上記の記述は Linux ISO w/ GRUB (64 bits) にあるものを真似した。

備考

なぜEFIの場合にデフォルトで使えないようにしているかは不明。
また、公式バイナリについて、EFI用バイナリでも、MBRから起動できた。逆にMBR用のバイナリでも、EFIから起動できた。(最後まで正常動作するのかは確認していない。)何のために別々なのか分からない。

メインボードによっては適切に選ぶ必要があるのかもしれない。

最終的なgrub.cfg

両方の方法を使えるようにしたgrub.cfgは下記となる。
筆者の好みでUbuntuの起動オプションを少しカスタマイズしているが、そこは今回関係ないので無視して頂きたい。

set timeout=30

loadfont unicode

set menu_color_normal=white/black
set menu_color_highlight=black/light-gray

menuentry "Try or Install Ubuntu" {
    set gfxpayload=keep
    linux   /casper/vmlinuz  --- verbose
    initrd  /casper/initrd
}
menuentry "Ubuntu (safe graphics)" {
    set gfxpayload=keep
    linux   /casper/vmlinuz nomodeset  --- verbose
    initrd  /casper/initrd
}
menuentry "Console" {
    set gfxpayload=keep
    linux   /casper/vmlinuz  --- verbose systemd.unit=multi-user.target
    initrd  /casper/initrd
}
menuentry "Console (safe graphics)" {
    set gfxpayload=keep
    linux   /casper/vmlinuz nomodeset --- verbose systemd.unit=multi-user.target
    initrd  /casper/initrd
}
grub_platform
if [ "$grub_platform" = "efi" ]; then
menuentry 'Boot from next volume' {
    exit 1
}
menuentry 'UEFI Firmware Settings' {
    fwsetup
}
menuentry 'Test memory' {
    linux /boot/memtest86+x64.bin
}
menuentry "Start Memtest86+, use built-in support for USB keyboards" {
    linux /boot/memtest_efi keyboard=both
}
menuentry "Start Memtest86+, use BIOS legacy emulation for USB keyboards" {
    linux /boot/memtest_efi keyboard=legacy
}
menuentry "Start Memtest86+, disable SMP and memory identification" {
    linux /boot/memtest_efi nosmp nosm nobench
}
else
menuentry 'Test memory' {
    linux16 /boot/memtest86+x64.bin
}
menuentry "Start Memtest86+, use built-in support for USB keyboards" {
    linux /boot/memtest_mbr keyboard=both
}
menuentry "Start Memtest86+, use BIOS legacy emulation for USB keyboards" {
    linux /boot/memtest_mbr keyboard=legacy
}
menuentry "Start Memtest86+, disable SMP and memory identification" {
    linux /boot/memtest_mbr nosmp nosm nobench
}
fi

msys2 pacman segmentation fault

なぜかmsys2のpacmanがsegmentation faultで実行できないようになってしまった。pacmanをダウングレードしたら動作するようになり、アップグレードしてもなぜか問題なかった。ダウングレード前のバージョンはおそらくpacman-6.1.0-3。

# msys2のプロセスをすべて終了
...

# pacman-6.1.0-2をダウンロード
curl -LO https://repo.msys2.org/msys/x86_64/pacman-6.1.0-2-x86_64.pkg.tar.zst

# pacmanを強制上書き
tar xvf \path\to\pacman-6.1.0-2-x86_64.pkg.tar.zst -C C:\msys64

# msys2のシェルを起動
...

# pacmanのdbと整合性を持たせるために手動インストールしたことにする
pacman -U /path/to/pacman-6.1.0-2-x86_64.pkg.tar.zst

# アップグレード
pacman -Syuu

QEMUでRaspberry PiをUser mode emulate

QEMUにはuser modeというものがあり、仮想マシン全体をエミュレートするのではなく、必要最小限をエミュレートすることができる。 これにより、dockerやchrootなどで、他アーキのイメージに入ってコマンドを実行できる。 Raspberry Piのエミュレートで検索すると、仮想マシンでやるものばかりヒットするが、多くの場合User modeで十分なのではなかろうか?(dockerもchrootで十分な場合も多いのだが、その件はいまは触れない) WSL2でも実行できる。

# qemu-user-staticのインストール
sudo apt install qemu-user-static

# イメージのループバックマウント
sudo losetup -P --show /dev/loop0 /path/to/raspios.img

# ファイルシステムのマウント
udisksctl mount -b /dev/loop0p2

# マウントポイントに移動
cd /path/to/mountpoint

# /sysなどをbind mount
sudo mount --bind /sys ./sys
sudo mount --bind /proc ./proc
sudo mount --bind /dev ./dev
sudo mount --bind /dev/pts ./dev/pts

# user mode emulateのためのバイナリをコピー
sudo cp /usr/bin/qemu-arm-static ./usr/bin/

# chrootする
sudo chroot . /usr/bin/qemu-arm-static /bin/bash --login -i

貧弱PCにChromeOSをインストールしてみた

ASUS L202Sという貧弱なノートPCを持っており、WindowsGUIありのLinuxではまともに使えず、Ubuntu Server GUI無しで運用していたのだが、ChromeOSならまともに使えるのではと思い立ち、調査・実行してみた。

こちらのブログ様を参考にした。基本的な手順はこちらを参照のこと。
https://smartasw.com/archives/8849

ただし、Chrome OSのイメージはこの記事で紹介されているものとは別のものを用いた。
ASUS L202SはBraswell世代のCPUが搭載されており、類似のChromebookのOSイメージとして、下記を見つけた。
https://chrome100.dev/board/terra/

こちらの最新のものでも、Chrome OS自体は動作するのだが、Androidアプリが動作しなかった。長時間の試行錯誤の結果、最も新しいもので97.0.4692.77でAndroidアプリが動くことが分かった。これにあわせてBrunchもr97のものを利用した。

利用してみた結果、残念ながらChrome OSであってもやはりもっさりだった。我慢すれば使えるかなという程度。
Androidのアプリとして、「どこでもDIGA」、「Dixim Play」を試してみたところ、操作はもっさりだが、視聴は問題なさそうだった。(ただし、Dixim Playでインターレースの1080iの動画を再生するのはスペック不足だった。)

OSのアップデートについては、いろいろ試したが、文鎮化してしまい成功しなかった。

Linux環境も試してみた。
crostiniという公式のものは動くことを確認。KVM仮想マシン)とのことなので、ただでさえ貧弱なPCには不向きと考え、すぐに削除した。
昔に使ったことのあるcroutonは、メンテナンスのみの状態とのことで、あまり積極的に使わない方がよいのかなと考え、試さなかった。
chromebrewというものが登場しており、多くのパッケージはコンパイル済ということで、試してみた。CUI環境は問題なさそうだった。GUIについては、Sommelierというものが必要なのだが、起動できずあきらめた。

バッテリーの持ちは、動画視聴で6時間程度、Web閲覧で10時間程度のようだ。
実測データ: asus l202s brunch battery - Google ドライブ

OSがアップデートできないのでセキュリティが不安だが、それはいいとしても、やはり動作がもっさりなので微妙でした。