俺様サーバー構築記 - archiso で無線LANを使って Windows が入っている HDD をバックアップ@ノートパソコン3台目(UEFI)

「[俺様サーバー構築記 - 基本方針](https://qiita.com/katz_engineer/items/dbabcff4e14e9db2b10f)」に基づいて、自宅サーバーの構築を目指して Arch Linux + ZFS をインストールしてきましたが、最近は古いノートパソコンの再生ばかりやって既に2台。ここへ来て3台目の再構築に着手します。

これが割と最近の可愛らしいマシンで、小型で持ち運びも楽な軽い物なのですがBIOSではなくてUEFIでした。そのため作業記録を採る事にします。

# 前書き：マシンスペック

機種：HP Pavilion TouchSmart 10-e013AU
型番: F6C99PA#ABJ
CPU: AMD A4-1200 APU with Radeon(TM) HD Graphics
クロック: 1.00GHz
メモリ: 2GB
HDD: 320GB

はい。HP製の、悪評高い例のアレです。

中身にはまだコピーを取ってないかも知れないデータが存在する可能性があるので、まずはそのバックアップからです。

廃棄予定の不要HDDを貰ってあるので、それと換装するつもりだったんですが。マニュアル通りにやっても途中で分解不可能になりました…。筐体が爪で留まっている箇所があり、力を入れて無理矢理外す工程があるのですけども。工作精度が悪いのかどうなのか外せませんでした。何だかなぁ:sob: ネットで事例を探しても、マニュアル通りで換装できた話しか出てきません。

諦めました。中身の情報だけバックアップします。

FreeNASにて領域を確保して、CIFS共有して、まずは普通にWindowsから C:\Users\該当ユーザー 以下全部をコピー。C:ドライブ直下を見渡して、データを持っていると思われる他のフォルダをすべて浚いました。最後に2〜3のファイルを表示して確認。

これで退路は確保できました。後は失敗してぶっ潰してしまっても何とかなります。

# 無線LAN

一つの試みとして、インストールの時点で無線LANを使用してみます。
参考文献1: [俺様サーバー構築記 - Arch Linux + ZFS の無線LAN設定@ノートパソコン2台目(BIOS)](https://qiita.com/katz_engineer/items/0bfa02e45f6f401a9696)
参考文献2: [ネットワーク - 俺様サーバー構築記 - ZFS の上に Arch Linux をインストール@ノートパソコン(BIOS)](https://qiita.com/katz_engineer/items/9d177766baf95c1e2674#%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF)

まずは「[俺様サーバー構築記 - ZFSをarchisoに埋め込む@物理マシン(BIOS)](https://qiita.com/katz_engineer/items/6f6ef6171f1fdcc4ec23)」で作ったZFS埋め込みarchisoを焼き付けたUSBメモリをマシンに挿して電源を入れ、ここからブートします。

## キーボード

```console
# loadkeys jp106
```

## ドライバーの状態を確認する

```console
# lspci -k | grep -i wireless
01:00.0 Network controller: Ralink corp. RT3290 Wireless 802.11n 1T/1R PCIe
$ lspci -ks 01:00.0
01:00.0 Network controller: Ralink corp. RT3290 Wireless 802.11n 1T/1R PCIe
        DeviceName: Ralink RT3290LE 802.11bgn Wi-Fi Adapter
        Subsystem: Hewlette-Packard Company Ralink RT3290LE 802.11bgn 1x1 Wi-Fi and Bluetooth 4.0 Combo Adapter
        Kernel driver in use: rt2800pci
        Kernel modules: rt2800pci, wl
```

無線インターフェイスが作成されているか確認。

```console
# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eno1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000
    link/ether 00:11:22:33:44:b2 brd ff:ff:ff:ff:ff:ff
3: wlo1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 00:11:22:33:44:c5 brd ff:ff:ff:ff:ff:ff
```

無線インターフェイスを起こして確認。

```console
# ip link set wlo1 up
# ip link show wlo1
3: wlo1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
    link/ether 00:11:22:33:44:c5 brd ff:ff:ff:ff:ff:ff
```

## ワイヤレス管理

### 情報を取得する

```console
# iw dev
phy#0
        Interface wlo1
                ifindex 3
                wdev 0x1
                addr 00:11:22:33:44:c5
                type managed
                txpower 20.00 dBm
# iw dev wlo1 link
Not connected.
```

### アクセスポイント検索

```console
# iw dev wlo1 scan | grep SSID
        SSID: 〈我が家のアクセスポイントのSSID〉
        〈以下省略〉
```

### 関連付け

参考文献：[WPA supplicant - ArchWiki](https://wiki.archlinux.jp/index.php/WPA_supplicant)

```/etc/wpa_supplicant/wpa_supplicant.conf``` は存在しません。

```console
# ls -a /etc/wpa_supplicant/
.  ..
```

必要な内容で作成し、コマンドを実行します。

```console
# cat >/etc/wpa_supplicant/wpa_supplicant.conf <<___
\`heredoc> ctrl_interface=/run/wpa_supplicant
\`heredoc> update_config=1
\`heredoc> ___
# wpa_supplicant -B -i wlo1 -c /etc/wpa_supplicant/wpa_supplicant.conf 
Successfully initialized wpa_supplicant
```

```wpa_cli``` コマンドを使って操作します。

```console
# wpa_cli
wpa_cli v2.6
Copyright (c) 2004-2016, Jouni Malinen <j@w1.fi> and contributors

This software may be distributed under the terms of the BSD license.
See README for more details.


Selected interface 'wlp4s0'

Interactive mode

> scan
OK
<3>CTRL-EVENT-SCAN-STARTED 
<3>CTRL-EVENT-SCAN-RESULTS 
<3>CTRL-EVENT-NETWORK-NOT-FOUND 
> scan_results
bssid / frequency / signal level / flags / ssid
aa:bb:cc:dd:6e:f3	2462	-43	[WPA2-PSK-CCMP][ESS]	〈我が家のSSID〉
11:22:33:44:d0:86	2412	-94	[WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]	〈知らないSSID〉
> add_network
0
> set_network 0 ssid "〈我が家のSSID〉"
OK
> set_network 0 psk "〈我が家のSSIDのパスワード〉"
OK
> enable_network 0
OK
<3>CTRL-EVENT-SCAN-STARTED 
<3>CTRL-EVENT-SCAN-RESULTS 
<3>WPS-AP-AVAILABLE 
<3>SME: Trying to authenticate with aa:bb:cc:dd:6e:f3 (SSID='〈我が家のSSID〉' freq=2462 MHz)
<3>Trying to associate with aa:bb:cc:dd:6e:f3 (SSID='〈我が家のSSID〉' freq=2462 MHz)
<3>Associated with aa:bb:cc:dd:6e:f3
<3>CTRL-EVENT-SUBNET-STATUS-UPDATE status=0
<3>CTRL-EVENT-REGDOM-CHANGE init=COUNTRY_IE type=COUNTRY alpha2=JP
<3>WPA: Key negotiation completed with aa:bb:cc:dd:6e:f3 [PTK=CCMP GTK=CCMP]
<3>CTRL-EVENT-CONNECTED - Connection to aa:bb:cc:dd:6e:f3 completed [id=0 id_str=]
> save_config
OK
> quit
```

### ネットワーク

IPv4で接続する為の設定です。

```console
# cat >/etc/systemd/network/all.network <<___
\`heredoc> [Match]
\`heredoc> Name=*
\`heredoc> 
\`heredoc> [Network]
\`heredoc> DHCP=ipv4
\`heredoc> ___
# systemctl start systemd-networkd
# ip link show wlo1
3: wlo1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:11:22:33:44:c5 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.2/24 brd 10.0.0.255 scope global dynamic wlo1
       valid_lft 86398sec preferred_lft 86398sec
    inet6 fe80::5635:30ff:fe9b:f8c5/64 scope link
       valid_lft forever preferred_lft forever 
```

家庭内無線LANに接続できました！

# バックアップ

## nfs

我が家のFreeNASを設定してnfsで共有します。画面操作内容は省略。ごく普通のNFS共有です。NFSv4は設定が面倒臭いので、NFSv3で接続する事にします。

なおFreeNASのIPアドレスは 10.0.0.100 とします。

参考文献: [2.2 クライアント - 2 設定 - NFS - ArchWiki](https://wiki.archlinux.jp/index.php/NFS#.E3.82.AF.E3.83.A9.E3.82.A4.E3.82.A2.E3.83.B3.E3.83.88)

```console
# showmount -e 10.0.0.100
Export list for 10.0.0.100
/mnt/tank/webdav/taro 10.0.0.0
# mount -t nfs 10.0.0.100:/mnt/tank/webdav/taro /mnt
```

## ddコマンドで念入りにバックアップ

バックアップファイルを保管するフォルダを作成。

```console
# mkdir /mnt/backup
# cd /mnt/backup
```

バックアップ対象のデバイスを確認。

```console
# lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0         7:0    0 573.2M  1 loop /run/archiso/sfs/airootfs
sda           8:0    0 298.1G  0 disk
├sda1        8:1    0   400M  0 part
├sda2        8:2    0   260M  0 part
├sda3        8:3    0   128M  0 part
├sda4        8:4    0   285G  0 part
└sda5        8:5    0  12.3G  0 part
sdb           8:16   1   7.3G  0 disk
├sdb1        8:17   1   686M  0 part /run/archiso/bootmnt
└sdb2        8:18   1    64M  0 part
mmcblk0     179:0    0  14.9G  0 disk
└mmcblk0p1 179:1    0  14.9G  0 part
```

sdaが対象のHDDになりますが、どうしてこんなに沢山のパーティションに分かれてるんでしょう？まあいいや。

Windowsが使っているのは一際目立つ大容量のsda4ですね。

念の為にセクタサイズを確認。

```console
# fdisk -l /dev/sda | grep size
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
```

512バイトセクタではなくて4Kセクタです。これを踏まえてddコマンドを使用します。一応、/dev/sda の眷属全部をバックアップ対象にしておきます。

参考文献1: [Linux ddコマンドでHDDコピー](http://prog.blog4.fc2.com/blog-entry-47.html)
参考文献2: [1.2 ハードディスク全体のクローン - 1 dd を使う - ディスクのクローン - ArchWiki](https://wiki.archlinux.jp/index.php/%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E3%81%AE%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%B3#.E3.83.8F.E3.83.BC.E3.83.89.E3.83.87.E3.82.A3.E3.82.B9.E3.82.AF.E5.85.A8.E4.BD.93.E3.81.AE.E3.82.AF.E3.83.AD.E3.83.BC.E3.83.B3)
参考文献3: [3.2 sfdisk を使う - 3 バックアップとリストア - fdisk - ArchWiki](https://wiki.archlinux.jp/index.php/Fdisk#.E3.83.90.E3.83.83.E3.82.AF.E3.82.A2.E3.83.83.E3.83.97.E3.81.A8.E3.83.AA.E3.82.B9.E3.83.88.E3.82.A2)

バックアップ用途で```dd```コマンドを使用する場合は、ブロックサイズはセクタサイズにしておいた方が無難です。ブロックサイズを大きく指定するとスピードは数倍になるようですが、セクタ読み取りエラーが発生した場合に悲惨な事になります。詳細は参考文献2を読みましょう。

```console
# cd /dev
# ls sda?
sda1  sda2  sda3  sda4  sda5
# ls sda? | while read drv; do dd if=/dev/$drv of=/mnt/backup/$drv.dd bs=4096 conv=noerror,sync; done
　　〈省略〉
```

まあとにかく時間が掛かります。完了するまでひたすら待ちましょう。```dd```コマンドにオプション ```status=progress``` を付けた方が良いかも知れません。

完了後、念の為、/dev/sda 全体も保管します。パーティションを分けたデバイスを丸ごと```dd```する場合には、パーティション情報も保存しておいた方がよろしい模様。

```console
# dd if=/dev/sda bs=4096 conv=noerror,sync | gzip >/mnt/backup/sda.dd.gz
　　〈省略〉
# sfdisk -d /dev/sda >/mnt/backup/fdisk_sda.dump
```

出来上がったファイルを確認。

```console
# ls -l /mnt/backup
total 318318560
-rw-r--r-- 1 nobody nobody         1053 Apr  1 12:14 fdisk_sda.dump
-rw-r--r-- 1 nobody nobody 156798110046 Apr  1 00:04 sda.dd.gz
-rw-r--r-- 1 nobody nobody    419430400 Mar 29 15:31 sda1.dd
-rw-r--r-- 1 nobody nobody    272629760 Mar 29 15:32 sda2.dd
-rw-r--r-- 1 nobody nobody    134217728 Mar 29 15:32 sda3.dd
-rw-r--r-- 1 nobody nobody 306054168576 Mar 30 06:35 sda4.dd
-rw-r--r-- 1 nobody nobody  13191086080 Mar 30 07:10 sda5.dd
```

## ループバックデバイス

Windowsがインストールされていたハズの /dev/sda4 の内容を軽く確認します。その為にループバックデバイスを利用します。

```console
# losetup -f /mnt/backup/sda4.dd
# losetup -l
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                                     DIO LOG-SEC
/dev/loop1         0      0         0  0 /mnt/backup/sda4.dd                             0     512
/dev/loop0         0      0         0  1 /run/archiso/bootmnt/arch/x86_64/airootfs.sfs   0     512
```

ループバックデバイスをマウントして、中身を確認します。

```console
# cd
# mkdir win
# mount /dev/loop1 win
Windows is hibernated, refused to mount.
The disk contains an unclean file system (0, 0).
Metadata kept in Windows cache, refused to mount.
Falling back to read-only mount because the NTFS partition is in an
unsafe state. Please resume and shutdown Windows fully (no hibernation
or fast restarting.)
```

Windowsは普通にシャットダウンすると高速起動の為にズルい事をします。```mount```時のゴチャゴチャしたメッセージはその事に関する注意書きです。

今回は書き込みをしないで、読み出しのみなので問題無いでしょう。

```console
# ls win
  〈省略〉
```

色々ゴチャゴチャしていたので省略しましたが、WindowsのCドライブ直下が表示されました。フォルダの中に```cd```したり、適当なテキストファイルを```cat```したりすると、確かに自分のファイルが見えました。どうやらバックアップは成功したようです。

さて後始末。

```console
# cd
# umount win
# losetup -d /dev/loop1
# losetup -l
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                                     DIO LOG-SEC
/dev/loop0         0      0         0  1 /run/archiso/bootmnt/arch/x86_64/airootfs.sfs   0     512
```

これで心置き無く ArchLinux をインストールできます。やったね:thumbsup_tone2: