「俺様サーバー構築記 - 基本方針」に基づいて、自宅サーバーの構築を目指して 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を貰ってあるので、それと換装するつもりだったんですが。マニュアル通りにやっても途中で分解不可能になりました…。筐体が爪で留まっている箇所があり、力を入れて無理矢理外す工程があるのですけども。工作精度が悪いのかどうなのか外せませんでした。何だかなぁ ネットで事例を探しても、マニュアル通りで換装できた話しか出てきません。
諦めました。中身の情報だけバックアップします。
FreeNASにて領域を確保して、CIFS共有して、まずは普通にWindowsから C:\Users\該当ユーザー 以下全部をコピー。C:ドライブ直下を見渡して、データを持っていると思われる他のフォルダをすべて浚いました。最後に2〜3のファイルを表示して確認。
これで退路は確保できました。後は失敗してぶっ潰してしまっても何とかなります。
無線LAN
一つの試みとして、インストールの時点で無線LANを使用してみます。
参考文献1: 俺様サーバー構築記 - Arch Linux + ZFS の無線LAN設定@ノートパソコン2台目(BIOS)
参考文献2: ネットワーク - 俺様サーバー構築記 - ZFS の上に Arch Linux をインストール@ノートパソコン(BIOS)
まずは「俺様サーバー構築記 - ZFSをarchisoに埋め込む@物理マシン(BIOS)」で作ったZFS埋め込みarchisoを焼き付けたUSBメモリをマシンに挿して電源を入れ、ここからブートします。
キーボード
# loadkeys jp106
ドライバーの状態を確認する
# 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
無線インターフェイスが作成されているか確認。
# 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
無線インターフェイスを起こして確認。
# 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
ワイヤレス管理
情報を取得する
# 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.
アクセスポイント検索
# iw dev wlo1 scan | grep SSID
SSID: 〈我が家のアクセスポイントのSSID〉
〈以下省略〉
関連付け
参考文献:WPA supplicant - ArchWiki
/etc/wpa_supplicant/wpa_supplicant.conf
は存在しません。
# ls -a /etc/wpa_supplicant/
. ..
必要な内容で作成し、コマンドを実行します。
# 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
コマンドを使って操作します。
# 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で接続する為の設定です。
# 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
# 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コマンドで念入りにバックアップ
バックアップファイルを保管するフォルダを作成。
# mkdir /mnt/backup
# cd /mnt/backup
バックアップ対象のデバイスを確認。
# 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ですね。
念の為にセクタサイズを確認。
# 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コピー
参考文献2: 1.2 ハードディスク全体のクローン - 1 dd を使う - ディスクのクローン - ArchWiki
参考文献3: 3.2 sfdisk を使う - 3 バックアップとリストア - fdisk - ArchWiki
バックアップ用途でdd
コマンドを使用する場合は、ブロックサイズはセクタサイズにしておいた方が無難です。ブロックサイズを大きく指定するとスピードは数倍になるようですが、セクタ読み取りエラーが発生した場合に悲惨な事になります。詳細は参考文献2を読みましょう。
# 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
する場合には、パーティション情報も保存しておいた方がよろしい模様。
# dd if=/dev/sda bs=4096 conv=noerror,sync | gzip >/mnt/backup/sda.dd.gz
〈省略〉
# sfdisk -d /dev/sda >/mnt/backup/fdisk_sda.dump
出来上がったファイルを確認。
# 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 の内容を軽く確認します。その為にループバックデバイスを利用します。
# 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
ループバックデバイスをマウントして、中身を確認します。
# 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
時のゴチャゴチャしたメッセージはその事に関する注意書きです。
今回は書き込みをしないで、読み出しのみなので問題無いでしょう。
# ls win
〈省略〉
色々ゴチャゴチャしていたので省略しましたが、WindowsのCドライブ直下が表示されました。フォルダの中にcd
したり、適当なテキストファイルをcat
したりすると、確かに自分のファイルが見えました。どうやらバックアップは成功したようです。
さて後始末。
# 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 をインストールできます。やったね