[PR] 本記事にはプロモーションが含まれています。

【AlmaLinux 9】SSD を USB の HDD に dd で丸ごと控えた|控えから起こしたら緊急モード、LVM の「使ってよいディスクの一覧」

SSD の中身を USB の HDD に丸ごと写すイメージ 自宅サーバー構築
➔ 自宅サーバー構築メモの目次はこちら

【2026年11月8日時点の情報です】

自宅サーバー(AlmaLinux 9 の KVM のホスト)の NVMe の SSD を、新しい PC にそのまま差し替えました(前の記事)。差し替える前に、万一に備えて、SSD の中身を USB の HDD に丸ごと控えました。

控えの形は、「そのまま起動できる形」にしました。SSD が壊れたり、移すのに失敗したりしたときに、HDD をつなぐだけで元のサーバーが起きるようにするためです。そのために、dd で SSD の端から端までを、ビットごと HDD に写しました。組み込みで言えば、ROM の中身をそのまま別の ROM に焼くのと同じです。

この記事では、控えの入れ先を選ぶところから、写すまでと、その控えから本当に起きるかを試したら緊急モードになった件までを書きます。

登場するホスト名などは、セキュリティのため実際とは異なる架空のものに置き換え、写真の中の値はぼかしています。

場面1:控えの入れ先を選ぶ

dd は端から端までを写すので、写し先は写す元と同じか、それより大きい必要があります。少しでも小さいと、最後の部分が切れて起動できません。同じ「500GB」と書かれていても、バイトの数がちがうことがあるので、バイトでくらべました。

手元の外付けの HDD(USB のケースに入れた 2.5インチ)を自宅サーバーにつないで、容量を見ました。読むだけのコマンドです。

Bash
lsblk -b -d -o NAME,SIZE,TYPE,MODEL,TRAN
  • lsblk:
    ディスクの一覧
  • -b:
    容量をバイトで出す
  • -d:
    ディスクだけを出す(中の区切りは出さない)
  • -o NAME,SIZE,TYPE,MODEL,TRAN:
    名前・容量・種類・型番・つなぎ方(usb が外付け)

1台目の HDD では、こうなりました。

Plaintext
NAME            SIZE TYPE MODEL                 TRAN
sda     320072933376 disk ST320LT020-9YG142     usb
sr0       1073741312 rom  HL-DT-ST DVDROM DUD0N sata
nvme0n1 500107862016 disk CT500P3SSD8           nvme

写し先が 320GB で、写す元の SSD(500GB)より 180GB ほど足りません。別の HDD に替えました。

Plaintext
NAME            SIZE TYPE MODEL                 TRAN
sda     500107862016 disk ST500LM021-1KJ152     usb
sr0       1073741312 rom  HL-DT-ST DVDROM DUD0N sata
nvme0n1 500107862016 disk CT500P3SSD8           nvme

今度は、バイトの数が SSD とぴったり同じ(500,107,862,016 バイト)でした。余りはありませんが、入ります。

HDD の健康を見る

控えの入れ先なので、写す前に、HDD が傷んでいないかを見ました。

Bash
sudo smartctl -d sat -i -H /dev/sda | grep -E 'Model|Serial|Capacity|overall'
sudo smartctl -d sat -A /dev/sda | grep -E 'Reallocated_Sector|Power_On_Hours|Current_Pending|Offline_Uncorrectable|UDMA_CRC'
  • sudo smartctl -d sat:
    ディスクが自分で記録している健康の値(S.M.A.R.T.)を読む。-d sat は、USB のケースの向こうの SATA のディスクとして聞く形
  • -i -H:
    型番などの情報と、健康の判定
  • -A:
    値の表
  • Reallocated_Sector・Current_Pending・Offline_Uncorrectable:
    読めなくなって代わりの場所に移した数、移す待ちの数、直せなかった数。右端(RAW_VALUE)が 0 なら傷みなし
  • Power_On_Hours・UDMA_CRC:
    電源が入っていた時間と、ケースとのやり取りの誤りの数
Plaintext
Model Family:     Seagate Laptop HDD
Device Model:     ST500LM021-1KJ152
Serial Number:    xxxxxxxx
User Capacity:    500,107,862,016 bytes [500 GB]
SMART overall-health self-assessment test result: PASSED
  5 Reallocated_Sector_Ct   0x0033   100   100   036    Pre-fail  Always       -       0
  9 Power_On_Hours          0x0032   065   065   000    Old_age   Always       -       30722
197 Current_Pending_Sector  0x0032   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0030   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x0032   200   200   000    Old_age   Always       -       0

判定は PASSED、傷みの数は全部 0 でした。電源が入っていた時間は 30,722時間(約3年半ぶん)で、よく使われたディスクですが、ふだんはしまっておく控えなら十分です。

場面2:USB の HDD から起きるための準備

写す前に、起動のいちばん最初に読む部品の束(initramfs)に、USB のディスクの読み方を入れておきました。AlmaLinux 9 の initramfs は「今の機械専用の形」(initramfs を作る道具 dracut の hostonly モード)で作られるので、NVMe の SSD から起きている今は、USB のディスクの読み方が入っていません。そのまま写すと、控えを USB から起こそうとしても、ディスクを読めずに止まります。

控えは今の SSD をそっくり写したものなので、写す前に SSD の中の initramfs を直しておけば、控えにも入ります。

Bash
echo 'add_drivers+=" nvme ahci uas usb_storage xhci_pci "' | sudo tee /etc/dracut.conf.d/90-portable-drivers.conf
sudo dracut --force /boot/initramfs-$(uname -r).img $(uname -r)
sudo lsinitrd /boot/initramfs-$(uname -r).img | grep -oE '(uas|usb-storage|ahci|nvme)\.ko[^ ]*' | sort -u
  • add_drivers+=” … “:
    機械専用の形のまま、名前を挙げた読み方を足す設定
  • uas・usb_storage:
    USB のディスクの読み方(新しい形と古い形)
  • sudo dracut –force …:
    この設定で initramfs を作り直す
  • sudo lsinitrd … | grep …:
    足した読み方が入ったか
Plaintext
ahci.ko.xz
nvme.ko.xz
uas.ko.xz
usb-storage.ko.xz

全部入りの形(hostonly="no")にしなかったわけと、xhci_pci が出ないわけは、前の記事の場面2に書いています。

場面3:Clonezilla Live の USB メモリーを作る

動いている SSD をそのまま写すと、書き込みの途中のファイル(仮想マシンのディスクなど)が壊れた写しになります。なので、自宅サーバーを止めて、USB メモリーから別の小さな Linux を起こし、そこから写します。

その小さな Linux には、ディスクを写す専用の Clonezilla Live を使いました。中の端末で dd が使えます。2026年11月7日時点の安定版は 3.3.3-37 でした。

Windows の操作だけで作れる「zip を広げるだけ」の形にしました。

No.操作中身
1ダウンロード公式のページで「stable」を選び、CPU は amd64、ファイルの形は zip
2USB メモリーを消すエクスプローラーで USB メモリーを右クリック →「フォーマット」→ ファイルシステムを FAT32 に
3中身を写すzip を開き、中身をそのまま USB メモリーのいちばん上に写す
4確かめいちばん上に EFI と live のフォルダと、Clonezilla-Live-Version のファイルがあればよい

UEFI の Secure Boot が有効な PC では、amd64 の版を使います。

ダウンロードしたファイルが壊れていないかを見る

ダウンロードした zip の指紋(ハッシュ)を、公式のページの「checksums」にある値とくらべました。

PowerShell
Get-FileHash "$env:USERPROFILE\Downloads\clonezilla-live-*-amd64.zip" -Algorithm SHA256 | Format-List
  • Get-FileHash:
    ファイルの指紋を計算する(組み込みで言えば、書き込んだ ROM の CRC の照合)
  • “$env:USERPROFILE\Downloads\clonezilla-live-*-amd64.zip”:
    ダウンロードのフォルダの Clonezilla の zip。* は版の番号の部分
  • -Algorithm SHA256:
    指紋の計算のやり方
  • Format-List:
    長い指紋を切らずに出す
Plaintext
Algorithm : SHA256
Hash      : BBB02B409708CF37774DEBE00F96C642C59C48EBB216F7349DC2252F705FF10E
Path      : C:\Users\xxxx\Downloads\clonezilla-live-3.3.3-37-amd64.zip

公式の checksums の SHA256 の欄にある clonezilla-live-3.3.3-37-amd64.zip の値と同じ(大文字と小文字のちがいだけ)だったので、壊れていません。

場面4:dd で写す

自宅サーバーを止めると、仮想マシンの WordPress(ブログ)も止まります。写すあいだの1時間ほどは、ブログが止まる前提で進めました。

Bash
sudo virsh list --all
sudo poweroff
  • sudo virsh list –all:
    止める前の仮想マシンの状態
  • sudo poweroff:
    止める。仮想マシンを先に正しくシャットダウンしてから止まる

止まったら、Clonezilla の USB メモリーと控えの HDD をつなぎ、電源を入れて富士通のロゴで F12 を押し、起動の一覧から USB メモリーを選びました。Clonezilla の最初の画面のあと、言語とキーボードを選び、「Start_Clonezilla」ではなく「Enter_shell」で端末に入りました。

写す元と写し先を型番で確かめる

dd は、写し先を確かめずに上書きします。Clonezilla の中では、ディスクの名前(sda・sdb)が AlmaLinux のときと入れ替わることがあるので、写す前に型番で確かめました。

Bash
lsblk -b -d -o NAME,SIZE,MODEL,TRAN
  • lsblk -b -d -o NAME,SIZE,MODEL,TRAN:
    ディスクの名前・容量(バイト)・型番・つなぎ方
Clonezilla Live の端末で、写す元の NVMe の SSD と写し先の USB の HDD を、型番と容量で確かめた画面
No.名前型番役目
1nvme0n1CT500P3SSD8写す元(今の SSD)
2sdaST500LM021-1KJ152写し先(控えの HDD)
3sdbUSB DISK 3.2Clonezilla の USB メモリー(触らない)

dd

if=(元)と of=(先)を逆にすると、今の SSD が消えます。Enter を押す前に、2つを見直しました。

Bash
sudo dd if=/dev/nvme0n1 of=/dev/sda bs=4M status=progress conv=fsync
  • if=/dev/nvme0n1:
    読む元(input file)。今の SSD
  • of=/dev/sda:
    書く先(output file)。控えの HDD
  • bs=4M:
    一度に 4MB ずつ写す。小さいと遅くなる
  • status=progress:
    写した量と速さを、途中で出し続ける
  • conv=fsync:
    終わる前に、HDD のキャッシュの中身まで書き切る
dd で 500GB を写し終えた画面。4238秒、118MB/s)
Plaintext
119235+1 records in
119235+1 records out
500107862016 bytes (500 GB, 466 GiB) copied, 4238.12 s, 118 MB/s

500,107,862,016 バイトを、約71分(1秒に 118MB)で写しました。records in と out が同じ数で、エラーの行もありません。

いつもどおり起こす

sudo poweroff で Clonezilla を止め、USB メモリーと控えの HDD を両方とも抜いてから、いつもどおり SSD から起こしました。控えの HDD をつないだまま起こすと、中身がまったく同じなので、同じ LVM が2つ見えて混乱します。

Bash
lsblk -d -o NAME,SIZE,MODEL,TRAN
sudo pvs
sudo virsh list --all
  • lsblk -d -o NAME,SIZE,MODEL,TRAN:
    控えの HDD が抜けているか
  • sudo pvs:
    LVM の土台のディスク。SSD の区切りの1行だけで、「duplicate」(同じものが2つ)の警告が出なければよい
  • sudo virsh list –all:
    仮想マシンが自動で起きたか
Plaintext
NAME      SIZE MODEL                 TRAN
sr0      1024M HL-DT-ST DVDROM DUD0N sata
nvme0n1 465.8G CT500P3SSD8           nvme
  PV             VG        Fmt  Attr PSize   PFree
  /dev/nvme0n1p3 almalinux lvm2 a--  464.17g    0
 Id   名前             状態
-------------------------------------
 1    myserver         実行中

ブラウザでブログが開くのも確かめて、写す作業は終わりです。

場面5:控えから起こしたら緊急モード

控えは、本当に起きるかを試すまでは安心できません。SSD を新しい PC に移したあと、空になった前の PC(Q558)で、控えの HDD から起こしてみました。

試すときに気をつけたことが2つあります。

No.気をつけたことわけ
1前の PC に LAN をつながない控えの中身は自宅サーバーそのもの。LAN をつなぐと、同じ IP アドレスで起きて、今動いている自宅サーバーやブログとぶつかる
2控えの HDD を新しい PC にはつながない新しい PC には同じ中身の SSD が入っている。同じ LVM が2つ見えて混乱する

USB のケースに入れた控えの HDD をつなぎ、富士通のロゴで F12 を押して HDD を選ぶと、起動は進みましたが、途中で止まって root のパスワードを聞かれました。

Plaintext
You are in emergency mode. After logging in, type "journalctl -xb" to view
system logs, "systemctl reboot" to reboot, "systemctl default" or "exit"
to boot into default mode.

emergency mode(緊急モード) は、起動の途中で何かのつなぎ込み(マウント)などに失敗して、そこで止まった状態です。画面の日本語は文字が出せず、四角(■)になっていました。

root のパスワードで入り、原因を見ました。

Bash
export LANG=C
systemctl --failed
journalctl -xb -p err --no-pager | tail -n 20
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINTS
  • export LANG=C:
    表示を英語にする(■を出さないため)
  • systemctl –failed:
    起動で失敗したものの一覧
  • journalctl -xb -p err –no-pager | tail -n 20:
    今回の起動のエラーの最後の20行。-x は説明の文も足す
  • lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINTS:
    ディスクの中の区切りと、どこにつながったか
控えの HDD から起こすと緊急モードになり、/home の LVM が待ち時間切れになった画面(ホスト名はぼかしてある)
Plaintext
Nov 07 15:54:02 kvmhost systemd[1]: Timed out waiting for device /dev/mapper/almalinux-home.
-- The job identifier is 165 and the job result is timeout.
NAME                     SIZE FSTYPE      MOUNTPOINTS
sda                    465.8G
|-sda1                   600M vfat        /boot/efi
|-sda2                     1G xfs         /boot
`-sda3                 464.2G LVM2_member
  |-almalinux-root     406.4G xfs         /
  `-almalinux-swap       7.8G swap        [SWAP]

/boot/efi・/boot・/・スワップは HDD からつながっていましたが、/home(almalinux-home)だけが出てこず、待ち時間切れで止まっていました。控えの中身が壊れているのではなく、LVM が /home の部分を使える状態にしていなかったのです。

場面6:LVM の「使ってよいディスクの一覧」

AlmaLinux 9 の LVM には、使ってよいディスクの一覧(devices file、/etc/lvm/devices/system.devices)があります。LVM は、この一覧に書かれたディスクしか相手にしません。

Bash
cat /etc/lvm/devices/system.devices
  • cat /etc/lvm/devices/system.devices:
    使ってよいディスクの一覧の中身
Plaintext
# LVM uses devices listed in this file.
# Created by LVM command lvmdevices pid 3733 at Sat Jun  6 03:50:12 2026
# HASH=xxxxxxxxxx
PRODUCT_UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
VERSION=1.1.4
IDTYPE=sys_wwid IDNAME=nvme.xxxx-xxxxxxxx… DEVNAME=/dev/nvme0n1p3 PVID=xxxxxxxx…

一覧にあったのは、NVMe の SSD の ID(製造番号から作られたもの)の1行だけでした。控えの HDD は中身がそっくり同じでも、ID がちがうので「知らないディスク」として相手にされず、/home が出てこなかったのです。

/ とスワップだけ出たのは、起動のいちばん最初(initramfs)で、カーネルに渡す指定(rd.lvm.lv=almalinux/root など)でこの2つを名前で出していたためと見ています。/home はそのあと、一覧を見て出す流れだったので、出ませんでした。組み込みで言えば、ブートローダは ROM の場所を直に指定して読めたが、OS が起動後に「登録済みの ID だけ許可する」表で照合して、別の ID の基板を弾いたような状態です。

一覧に HDD を足す

控えの HDD の中の一覧に、HDD を足しました。この変更は控えの中だけで、今動いている自宅サーバーには関係しません。

Bash
lvmdevices --adddev /dev/sda3
  • lvmdevices –adddev /dev/sda3:
    控えの HDD の LVM の区切り(sda3)を、一覧に足す

すると、「この HDD の LVM の印(PVID)は、一覧にある NVMe のものと同じだが、足してよいか」と聞かれました。

Plaintext
WARNING: adding device /dev/sda3 with PVID xxxxxxxx… which is already used for …
Add device with duplicate PV to devices file?

そっくり写したので同じ印になっているだけで、この PC に NVMe はつながっていないので、ぶつかりません。y で足しました。一覧には NVMe の行も残るので、この控えを将来 SSD に戻して使うときも、そのまま起きます。

続けて、LVM の中の部分を全部使える状態にして、/home をつなぎました。

Bash
vgchange -ay almalinux
lvs
mount -a
findmnt /home
  • vgchange -ay almalinux:
    LVM の中の部分(root・swap・home)を全部使える状態にする。-a y は activate(有効にする)
  • lvs:
    LVM の中の部分の一覧
  • mount -a:
    /etc/fstab に書かれたもののうち、まだつながっていない /home をつなぐ
  • findmnt /home:
    /home がつながったか
lvmdevices で HDD を一覧に足し、/home がつながった画面(ホスト名と ID はぼかしてある)
Plaintext
  3 logical volume(s) in volume group "almalinux" now active
  LV   VG        Attr       LSize
  home almalinux -wi-a----- 50.00g
  root almalinux -wi-ao---- 406.41g
  swap almalinux -wi-ao----   7.76g
[  603.398137] XFS (dm-2): Ending clean mount
TARGET SOURCE                    FSTYPE OPTIONS
/home  /dev/mapper/almalinux-home xfs   rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota

/home がつながり、Ending clean mount で中身も正常でした。

起こし直す

systemctl reboot で起こし直し、もう一度 F12 で控えの HDD を選ぶと、今度は緊急モードにならず、ログインの画面まで来ました。ログインして止め、HDD を抜いてしまいました。

まとめ

SSD を USB の HDD に dd で丸ごと写すと、そのまま起動できる控えになります。ただし AlmaLinux 9 では、写しただけでは LVM の「使ってよいディスクの一覧」に HDD が入っておらず、控えから起こすと /home が出ずに緊急モードになりました。一覧に足すと起きました。

No.することわけ場面
1写し先はバイトで同じか大きいものにするdd は端から端までを写す。小さいと最後が切れる場面1
2写す前に initramfs に USB のディスクの読み方を足す機械専用の形のままだと、USB から起きられない場面2
3止めてから、別の Linux(Clonezilla Live)で写す動いたまま写すと、書き込み中のファイルが壊れた写しになる場面3・4
4dd の前に、写す元と写し先を型番で確かめる名前(sda など)は入れ替わることがある。逆にすると元が消える場面4
5控えを試すときは LAN をつながず、同じ中身の SSD とも一緒につながない同じ IP、同じ LVM がぶつかる場面5
6控えから起こしたら lvmdevices --adddev で一覧に足す一覧にない ID のディスクは、LVM が相手にしない場面6

控えは、作っただけでなく、実際に起こしてみて初めて「使える控え」になります。今回も、試さなければ、本当に要るときに緊急モードで慌てるところでした。

コメント