第18回 システム移行
2021.03.27 / 2021.07.30更新

YouTube でも紹介しています。画像をクリックすると再生できます。
今回は、自宅WEBサーバを新たにもう1台組み立て、システムを移行します。
新規WEBサーバでは、 mSATA SSD storage boardを用いて、Raspberry Pi と一体化しています。
いままでの外付けのハードディスクをSSDに換装することにより消費電力を抑えシステムの安定化と設置スペースを削減しています。
また、以前中古で購入した無停電安定化電源を新品機種へと置き換えています。
■旧WEBサーバ

旧サーバでは、外付けのポータブルハードディスクをUSBケーブルで接続していました。
■新サーバ

新サーバでは、mSATA SSD Storage Boardを使用し、256GBのSSDを装着しています。

このStorage Boardをラズベリーパイの下に取り付けています。

無停電電源装置を取り付けた様子です。
■前準備
システム移行に限ったことではないのですが、実際の作業を行う前に、手順書をきちんと作成しましょう。
手順書が完成したからといってすぐに作業を開始してはいけません。散歩に出掛けたり、お風呂にはいったりと、
そういった気分転換のなかで、手順書の不備に気づくことは多々あることです。
■同一WEBサーバのストレージ拡張の場合
現在稼働中のWEBサーバの外付けHDDを容量の大きいストレージに換えるだけであればとても簡単です。
ここで、WEBサーバ構築時の作業内容を振り返ってみます。
1.まずは、microSD上にシステムを構築しました。

2.次に、外付けHDDを接続して、拡張領域を複写しました。

3.拡張領域の参照先を外付けHDDに切り替えました。

同一サーバ上で、ストレージを拡張するのであれば、とても簡単です。
新たにストレージを接続して、既存の外付けハードディスクの内容を複写します。

システムをシャットダウンして、既存のハードディスクを取り外し、再起動すれば完了です。

USBブートではないので、ほとんど問題なくストレージの移行ができるはずです。
■新規WEBサーバにシステムを移行する場合
今回はこちらの作業を行いました。
Raspberry Pi 本体が変わるので、機種固有のMACアドレスを変更する必要があります。
◇移行先サーバMACアドレスの確認
まずは、適当な開発用ラズパイから、Raspberry Pi OS のmicro SDカードを抜き取り、移行先の Raspberry Pi 3 model B+ に挿して起動します。
移行先、Raspi3B+の機種固有のMACアドレスを調べます。
$ ip a
..........
2: eth0: mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether b8:27:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
..........
このMACアドレスを控えておきます。
※Raspberry Pi の場合、B8:27で始まるようです。
◇ディスク使用量の把握
現在、稼働中のWEBサーバのディスク使用率を確認してみます。
$ df
Filesystem 1K-blocks Used Available Use% Mounted on
udev 450380 0 450380 0% /dev
tmpfs 93396 4524 88872 5% /run
/dev/sda1 114854020 8211268 100765404 8% /
tmpfs 466972 0 466972 0% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
tmpfs 466972 0 466972 0% /sys/fs/cgroup
/dev/mmcblk0p1 258095 97663 160433 38% /boot/firmware
tmpfs 93392 0 93392 0% /run/user/1000
HDD使用量が8GB程度なので、ディスクの内容をラズベリーパイ本体に挿してあるブート用のmicroSDカードの拡張領域にコピーすることにします。
◇拡張領域の複製

運用サーバの拡張領域である外付けハードディスクの内容で、microSDカード本体の拡張領域を更新します。
$ sudo mkdir -p /mnt/target
$ sudo mount /dev/mmcblk0p2 /mnt/target/
$ sudo rsync -aAX --delete --exclude={"/boot/*","/dev/*","/proc/*","/sys/*","/tmp/*","/run/*",
"/mnt/*","/media/*","/lost+found"} / /mnt/target
rsync: send_files failed to open "/var/lib/lxcfs/cgroup/blkio/blkio.reset_stats": Permission denied (13)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1196) [sender=3.1.2]
この際、/var/lib/lxcfsディレクトリがコピーできず、エラー表示されされますが。
lxcfs(Linux Containers Filesystem)関連のサービスは利用していないので気にしません。
◇microSDカードの複製

新しいmicroSDカードを、microSDカードリーダー/ライターに装着して、運用サーバのUSB端子に挿して複製します。
$ sudo dd if=/dev/mmcblk0 of=/dev/sdb bs=64K conv=noerror,sync status=progress
$ sudo fdisk -l
Disk /dev/mmcblk0: 29.7 GiB, 31914983424 bytes, 62333952 sectors
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 * 2048 526335 524288 256M c W95 FAT32 (LBA)
/dev/mmcblk0p2 526336 62333918 61807583 29.5G 83 Linux
....
Disk /dev/sda: 111.8 GiB, 120034123776 bytes, 234441648 sectors
Device Start End Sectors Size Type
/dev/sda1 2048 234440703 234438656 111.8G Linux filesystem
....
Disk /dev/sdb: 29.7 GiB, 31914983424 bytes, 62333952 sectors
Device Boot Start End Sectors Size Id Type
/dev/sdb1 * 2048 526335 524288 256M c W95 FAT32 (LBA)
/dev/sdb2 526336 62333918 61807583 29.5G 83 Linux
◇MACアドレスの変更と暫定的なネットワークアドレスの書き換え
$ sudo mkdir -p /mnt/target
$ sudo mount /dev/sdb2 /mnt/target/
複製したmicroSD内のMACアドレスを、最初に調べておいたMACアドレスに書き換えます。
また、運用中のサーバと重複しないように、IPアドレスも書き換えます。
※サーバ内の BIND、POSFIX、Apache は運用中のサーバIPアドレスと関連付けられているので。この状態では一部機能が正常に動作しません。
移行先サーバのテスト完了後に、現在運用中のサーバを止めて、運用サーバのIPアドレスで置き換えます。
$ sudo vi /mnt/target/etc/netplan/50-cloud-init.yaml
network:
version: 2
ethernets:
eth0:
dhcp4: no
dhcp6: no
match:
macaddress: b8:27:xx:xx:xx:xx
set-name: eth0
addresses: [192.168.11.30/24]
gateway4: 192.168.11.1
nameservers:
addresses: [192.168.11.11,192.168.11.1]
optional: true
◇fstabの書き換え
ラベルを確認します。
$ sudo blkid
/dev/mmcblk0p1: LABEL="system-boot" UUID=....
/dev/mmcblk0p2: LABEL="writable" UUID=....
/dev/sda1: LABEL="writable-hdd" UUID=....
/dev/sdb1: LABEL="system-boot" UUID=....
/dev/sdb2: LABEL="writable" UUID=....
現行サーバーではブート後にハードディスク内の拡張領域を参照するようにラベルを変更したので、これをmicroSD内拡張領域のラベル名に変更します。
$ sudo vi /mnt/target/etc/fstab
LABEL=writable-hdd / ext4 defaults 0 0
LABEL=system-boot /boot/firmware vfat defaults 0 1
↓
LABEL=writable / ext4 defaults 0 0
LABEL=system-boot /boot/firmware vfat defaults 0 1
$ sudo umount /mnt/target
◇システム領域の変更

起動後のシステム拡張領域がHDD(/dev/sda1)になっているので、microSD内の拡張領域(/dev/mmcblk0p2)に戻します。
$ sudo mount /dev/sdb1 /mnt/target/
$ sudo vi /mnt/target/cmdline.txt
net.ifnames=0 dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait logo.nologo
$ sudo umount /mnt/target
◇移行先サーバの起動
移行先ラズベリーパイの底部にSSD Storage Boardを取り付け、複製したmicroSDを挿して起動します。

◇SSDの初期化
今回は256GBのSSDを接続した場合で、説明します。SSDをUSBスロットに接続します。
$ sudo fdisk -l
Disk /dev/mmcblk0: 29.7 GiB, 31914983424 bytes, 62333952 sectors
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 * 2048 526335 524288 256M c W95 FAT32 (LBA)
/dev/mmcblk0p2 526336 62333918 61807583 29.5G 83 Linux
Disk /dev/sda: 238.5 GiB, 256060514304 bytes, 500118192 sectors
パーティションの作成(GPT対応のパーティションを作成)
パーティションの管理方式には GPT(GUID Partition Table)を使用します。
$ sudo parted /dev/sda
GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
新品のストレージの場合、パーティションテーブル自体が未設定の状態となります。下記の様なメッセージが表示されます。
Error: /dev/sda: unrecognised disk label
パーティションテーブルとしてGPTを作成します。
(parted) mklabel gpt
すべての領域を1つのパーティションに割り当てることにします。
(parted) mkpart "Linux filesystem" 0% 100%
(parted) p
Disk /dev/sda: 256GB
Partition Table: gpt
Number Start End Size File system Name Flags
1 1049kB 256GB 256GB Linux filesystem
(parted) quit
パーティションのフォーマット
$ sudo mkfs.ext4 /dev/sda1
◇fstabの修正
ラベルを確認します
$ sudo e2label /dev/sda1
←ラベルが付いてないので、空行が表示されます
ラベルを付加します
$ sudo e2label /dev/sda1 writable-ssd
$ sudo e2label /dev/sda1
writable-ssd
◇拡張領域の複製

microSD内の拡張領域を、SSDに複写します。
$ sudo mkdir -p /mnt/target
$ sudo mount /dev/sda1 /mnt/target/
$ sudo rsync -aAX --delete --exclude={"/boot/*","/dev/*","/proc/*","/sys/*","/tmp/*","/run/*",
"/mnt/*","/media/*","/lost+found"} / /mnt/target
基本領域は本体のSDカードのままで、拡張領域のラベルをSSD側に変更します。
$ sudo vi /mnt/target/etc/fstab
LABEL=writable / ext4 defaults 0 0
LABEL=system-boot /boot/firmware vfat defaults 0 1
↓変更
LABEL=writable-ssd / ext4 defaults 0 0
LABEL=system-boot /boot/firmware vfat defaults 0 1
◇システム拡張領域の参照先変更

拡張領域をラズパイ本体のSDカード(/dev/mmcblk0p2)からSSD(/dev/sda1)に切り替えます。
$ sudo vi /boot/firmware/cmdline.txt
net.ifnames=0 dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/sda1 rootfstype=ext4 elevator=deadline rootwait logo.nologo
ubuntu server 20.04.02の場合
net.ifnames=0 dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=LABEL=writable-ssd rootfstype=ext4 elevator=deadline rootwait fixrtc
◇IPアドレスの書き換え
IPアドレスを稼働中の旧サーバのIPアドレスに書き換えます。
$ sudo vi /etc/netplan/50-cloud-init.yaml
network:
version: 2
ethernets:
eth0:
dhcp4: no
dhcp6: no
match:
macaddress: b8:27:xx:xx:xx:xx
set-name: eth0
addresses: [192.168.11.11/24]
gateway4: 192.168.11.1
nameservers:
addresses: [192.168.11.11,192.168.11.1]
optional: true
◇現行サーバのシャットダウン
$ sudo shutdown now
◇移行先サーバの再起動
$ sudo reboot
◇その他作業
ジャーナルファイルが膨れ上がっていたので削除しました。
ジャーナルの使用容量を確認します
$ journalctl --disk-usage
Archived and active journals take up 3.0G in the file system.
3日より前のエントリーを削除します
$ sudo journalctl --vacuum-time=3d
当方は、WEBサーバ・アクセス情報をMySQLで管理しているので、Apacheのログは必要なかったので、累積していたログを削除しました。
また、移行作業中に、MySQLのアクセスデータも更新されているので、重要であれば、MySQLデータディレクトリを元サーバから複製してもよいかもしれません。
事前に作業の流れを検証することで、キーボードやモニターを接続せずに、SSH接続にてノートパソコンから作業を行うことが可能です。
今回の作業では、WEBサービスを停止させたのは、旧サーバーのシャットダウン~新サーバー起動までの1分程度でした。
■参考文献
・Rsync によるフルシステムバックアップ
|
Raspberry Pi(ラズベリー パイ)は、ARMプロセッサを搭載したシングルボードコンピュータ。イギリスのラズベリーパイ財団によって開発されている。
たいていのことは100日あれば、うまくいく。長田英知著
「時間がなくて、なかなか自分のやりたいことができない」
「一念発起して何かを始めても、いつも三日坊主で終わってしまう」
「色んなことを先延ばしにしたまま、時間だけが過ぎていく」
そこで本書では、そんな著者が独自に開発した、
まったく新しい目標達成メソッド「100日デザイン」について、
その知識と技術を、余すところなくご紹介します。
まんがで納得ナポレオン・ヒル 思考は現実化する
OLとして雑務をこなす日々に飽き足らず、科学者だった父が残した薬品を商品化すべく、起業を決意した内山麻由(27)。彼女はセミナーで知り合った謎の女性からサポートを得ながら、彼女と二人三脚でナポレオン・ヒルの成功哲学を実践し、さまざまな問題を乗り越えていく。
ヒル博士の<ゴールデンルール>に従い、仕事に、恋に全力疾走する彼女の、成功への物語。
今日は人生最悪で最高の日 1秒で世界を変えるたったひとつの方法 ひすいこたろう著
偉人の伝記を読むと、最悪な日は、不幸な日ではなく、新しい自分が始まる日であることがわかります。最悪な出来事は、自分の人生が、想像を超えて面白くなる兆しなのです。偉人伝を読むことで、このときの不幸があったおかげで、未来にこういう幸せがくるのかと、人生を俯瞰する視線が立ち上がるのです。
ご飯は私を裏切らない heisoku著
辛い現実から目を背けて食べるご飯は、いつも美味しく幸せを届けてくれる。
29歳、中卒、恋人いない歴イコール年齢。バイト以外の職歴もなく、短期バイトを転々とする日々。ぐるぐると思索に耽るけど、ご飯を食べると幸せになれる。奇才の新鋭・heisokuが贈るリアル労働グルメ物語!
【最新版Gemini 3に対応!】できるGemini (できるシリーズ)
Geminiを「最強の知的生産パートナー」として使いこなすための、実践的なノウハウを凝縮した一冊です。
基本的な操作方法から、具体的なビジネスシーンでの活用、日々の業務を自動化するGoogle Workspaceとの連携、さらには自分だけのオリジナルAIを作成する方法まで余すところなく解説します。
Rustプログラミング完全ガイド 他言語との比較で違いが分かる!
Rustの各手法や考え方を幅広く解説!
500以上のサンプルを掲載。実行結果も確認。
全24章の包括的なチュートリアル。
ポチらせる文章術
販売サイト・ネット広告・メルマガ・ブログ・ホームページ・SNS…
全WEB媒体で効果バツグン!
カリスマコピーライターが教える「見てもらう」「買ってもらう」「共感してもらう」すべてに効くネット文章術
小型で便利な Type-C アダプター USB C オス - USB3.1 オスアダプター
Type-C端子のマイコンボードをこのアダプタを介して直接Raspberry Piに挿すことができます。ケーブルなしで便利なツールです。
Divoom Ditoo Pro ワイヤレススピーカー
15W高音質重低音/青軸キーボード/Bluetooth5.3/ピクセルアート 専用アプリ/USB接続/microSDカード
電源供給USBケーブル スリム 【5本セット】
USB電源ケーブル 5V DC電源供給ケーブル スリム 【5本セット】 電源供給 バッテリー 修理 自作 DIY 電子工作 (100cm)
|