エントリー

カテゴリー「PC」の検索結果は以下のとおりです。

(本)サーバー異常(復旧後)

時空系状況

  • 先日2日の16時過ぎから(本)サーバーに異常が発生
  • 異常はBlogへのアクセスが遅延することから判り,ネットワーク障害でないことからサーバーへネットワーク経由でログインしようとしたが拒絶されたためサーバーの再起動を試みる
  • 再起動は虚しく失敗し(異常による再起動の繰り返し状態)ハードウェア障害の疑いが濃くなったためUPS電源断後HDDを取り外す
  • ArmbianシステムでUSB接続したHDDのバックアップを試みると,問題なくHDDアクセスができたため必要なデータの退避完了
  • HDDのrootファイルシステムがスーパーブロックを含め異常となっていたがfsckにて修復完了(データとしてのファイルシステムは問題なし,ただしDBはrootファイルシステムに位置する)
  • ログファイルを参照したところHDDインタフェースの問題のようなエラーがありHDDのRW異常は発生していないようだ
  • HDDを再接続し電源投入,起動を確認
  • Blog以外の問題はなしでBlogはDBのテーブル異常により表示不可能になっていた
  • 異常のあったテーブル(5個)はバックアップファイルからリストア
  • 概ね復旧(現在)

特記事項

  • 復旧のためArmbianサーバを利用したが最新であるDebian10でのMySQLのセットアップが簡単にできなかった(未対応や変更点が多い)
  • 最新のArmbian用のphpmyadminがない(面倒だがセットアップはできた)
  • DBテーブルのFrmエラーだったのでRAWファイルを変更して解決しようとしたが不可だった
  • 破壊されていた5個のテーブルがバックアップより更新が古かったおかげで復旧できた
  • 破壊されていたテーブルの実ファイルは念のためディスクのフリーリストに載らないよう削除しないで残している
  • freoがPHP7.3で動作不良
  • freoを1.21.0ベースに更新
  • 再発の可能性あり

NanoPi NEOサーバを復旧させる

優先すべきだが予定外の事態だったので後回しになってしまった

原因を探る

サーバからmicroSDカードを取り出してバックアップ機にセットしてコンソールで調査

IMG_20220116_132241.jpg

再起動しないのでネックは何かと思っていたら,microSDカードの異常というかRO(リードオンリー)ロックになっていた

コンソール出力ではrootファイルシステムのfsckで異常となり起動せずメンテナンスモードになっている

U-Boot SPL 2021.04-armbian (May 06 2021 - 17:50:40 +0000)
DRAM: 512 MiB
Trying to boot from MMC1



Starting kernel ...

Loading, please wait...
Starting version 241
Begin: Loading essential drivers ... done.
Begin: Running /scripts/init-premount ... done.
Begin: Mounting root file system ... Begin: Running /scripts/local-top ... done.
Begin: Running /scripts/local-premount ... Scanning for Btrfs filesystems
done.
Begin: Will now check root file system ... fsck from util-linux 2.33.1
[/sbin/fsck.ext4 (1) -- /dev/mmcblk0p1] fsck.ext4 -a -C0 /dev/mmcblk0p1
fsck.ext4: Read-only file system while trying to open /dev/mmcblk0p1
Disk write-protected; use the -n option to do a read-only
check of the device.
fsck exited with status code 8
done.
Warning: File system check failed but did not detect errors
mount: Read-only file system
Failed to mount /dev/mmcblk0p1 as root file system.
(initramfs)

手動でrootファイルシステムをチェックしたところROのため書込みできない事態となっている

(initramfs) fsck.ext4 -n /dev/mmcblk0p1
e2fsck 1.44.5 (15-Dec-2018)
Warning: skipping journal recovery because doing a read-only filesystem check.
/dev/mmcblk0p1: clean, 46517/2789280 files, 740918/7666688 blocks
(initramfs)

この現象は前にもあって原因はメディアが強制的に(ROにして)書込みできないよう処理していることで起こると思われ「メディア自体の異常」の要因もあるが,ほぼ間違いなく「メディアの書込み壽命」だと考える

実際は本当の壽命ということでフラッシュメモリ自体の書込みエラーで発生させているのではなく,書込み回数の上限を決めておいて超えたら記録内容を保護するためROにしているのだろうと考える

つまり,まだ読むことは可能ということである(実際に全部読める)

利用していたmicroSDは以下の「KLEVV NEO」という安価なメモリで,9月から4~5箇月とうことなので約150日間となる

IMG_20220116_133551.jpg

microSDには書込み回数があるのでいつかはエラーになると考えていたが32GBもあり僅かなログの書込みだけなのであまりにも短すぎる

MLCフラッシュは約1万回の書込みが可能であることが(かなり以前に)公表されている(今だともっと回数が増えてるかも)

論理的には書込み回数が1万回として32GBなら,32GB×10000=320000GB(320TB)の(ワンタイム)記録ができるということになる(実際は書込み単位があるので少なくなる)

これを150(日)で割ると,320000GB÷150=2133GBとなり毎日約2TBもの書込みがあったことになるが・・・

→ 連続でも書込みは最低10MB/s,最大は良くても100MB/s位として,100(MB)×3600(s)×24(H)=8640000(MB)=8640(GB)

かなり譲って1/100の,20GB/日としても(ほとんどがログになるので)考えられない書込み量である

このあたりの書込み量も予想試算して1年以上余裕で持つだろうと考えていたので想定外であった

前回も「KLEVV NEO」のmicroSDで発生しており,この時は書き込むことは起きていないのにROになってしまった(マイクロSDカードが壊れた

今回の件も含め,このメーカーのmicroSDはもう使用しないほうが賢明だろう(メディアは永久保証となっているけど交換しても使えない物はいらない)

最初の復旧手順

microSDへの書込みはできないが読むことはできるので別のmicroSDへデットコピーして復旧させる

新しいmicroSDは「Gigastone」にした

IMG_20220116_142334.jpg

ところが,コピーの段階で2つのmicroSDの(セクター)サイズが異なることが判明(これには驚いたが)

「KLEVV NEO」の方が「Gigastone」よりセクター数が多いのである

逆なら問題ないのだが,しかたないので無視してデットコピーした・・・けど・・・やはり途中で起動停止

(initramfs) fsck.ext4 /dev/mmcblk0p1
e2fsck 1.44.5 (15-Dec-2018)
The filesystem size (according to the superblock) is 7666688 blocks
The physical size of the device is 7632640 blocks
Either the superblock or the partition table is likely to be corrupt!
Abort<y>? yes
(initramfs)

34048 blocksも食い違っていてfsckは(ファイルシステムが破壊されていると判断して)動作しなかった

残念ながらデットコピーでの復旧は失敗に終わる

さて,どうやってNanoPi NEOサーバを復旧させるかだが,時間待ちもあったこともあり再構築とコピー復活の2つの手段を実施

システムの再構築(手段1)

前回のOSバージョンも置いていたが,新しいのがリリースされていたので新しい方で再構築する(要するに全部作り直し)

最新OSイメージ: Armbian_21.08.1_Nanopineo_bullseye_current_5.10.60.img

ネックは設定のバックアップで本当の最新の設定へ戻せるかである(なのでメディアから設定データを取り出し検証する必要がある → これが復活手順にもなる)

IMG_20220116_142320.jpg

設定は(NanoPi NEOのサーバ化(ソフトウェア))で記録されている通りで不足や注意事項を追加

・armbianの最初の起動(root/1234)時にsudo権限の管理者用のユーザ追加を行うが,このユーザのuidが1000になる

・既にセットアップされているパッケージがあった(問題になる事はない)

・NTPは前回の設定方法では動作しない(現在,未解決)

・bindについては記録の記事から変更がある(バックアップの利用で問題なし)

・dhcpが起動しない問題で以下のように(ターミナルではカラム落ちして)表示される(前回もあったが記録されていないので注意)

● isc-dhcp-server.service - LSB: DHCP server
Loaded: loaded (/etc/init.d/isc-dhcp-server; generated)
Active: failed (Result: exit-code) since Sun 2022-01-16 19:53:43 JST; 48s ago
Docs: man:systemd-sysv-generator(8)
Process: 8928 ExecStart=/etc/init.d/isc-dhcp-server start (code=exited, status=1/FAILURE)
Tasks: 12 (limit: 905)
Memory: 8.5M
CPU: 406ms
CGroup: /system.slice/isc-dhcp-server.service
tq7964 /usr/sbin/dhcpd -4 -q -cf /etc/dhcp/dhcpd.conf
tq8339 /usr/sbin/dhcpd -4 -q -cf /etc/dhcp/dhcpd.conf
mq8943 /usr/sbin/dhcpd -4 -q -cf /etc/dhcp/dhcpd.conf

1月 16 19:53:41 nanopineo dhcpd[8955]: exiting.
1月 16 19:53:43 nanopineo isc-dhcp-server[8928]: Starting ISC DHCPv6 server: dhcpd6check syslog for diagnostics. ...
1月 16 19:53:43 nanopineo isc-dhcp-server[8960]: failed!
1月 16 19:53:43 nanopineo isc-dhcp-server[8961]: failed!
1月 16 19:53:43 nanopineo systemd[1]: isc-dhcp-server.service: Control process exited, code=exited, status=1/FAILURE
1月 16 19:53:43 nanopineo systemd[1]: isc-dhcp-server.service: Failed with result 'exit-code'.
1月 16 19:53:43 nanopineo systemd[1]: isc-dhcp-server.service: Unit process 7964 (dhcpd) remains running after unit stopped.
1月 16 19:53:43 nanopineo systemd[1]: isc-dhcp-server.service: Unit process 8339 (dhcpd) remains running after unit stopped.
1月 16 19:53:43 nanopineo systemd[1]: isc-dhcp-server.service: Unit process 8943 (dhcpd) remains running after unit stopped.
1月 16 19:53:43 nanopineo systemd[1]: Failed to start LSB: DHCP server.

 これは「/etc/default/isc-dhcp-server」を修正する前にdhcp serverを起動すると「/var/run/dhcpd.pid」が残存してserverが再起動しないためで,正常にserverが起動しない場合にロックファイルを削除しないバグがあると思われる

パーティーションコピーで復旧(手段2)

resize2fsを使えばファイスシステムのサイズを変えられるので旧microSDからシステム部分だけ取り出してサイズを変更して新microSDへ書き込めば復旧できる

この場合,元のOSイメージでの復旧なので設定した情報は最新,さらに設定内容を参照したりバックアップすることができる

ただし別途microSDを操作するためのlinuxシステムが必要となる(エミュで遊ぶため構築していたUbuntuDesktopを利用した)

今回は1つのパーティションなので手間が掛からなかった

①Ubuntuで旧microSDを接続してデバイス名を確認(/dev/sdc)

※デバイス名の確認方法として,接続前に「fdisk -l」でデバイスリストを表示させて,接続後に再度リストに増えたデバイスが対象

パーティションを確認すると1つだけある

# fdisk -l /dev/sdc
ディスク /dev/sdc: 29.6 GiB, 31724666880 バイト, 61962240 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0xc236f75e

デバイス 起動 開始位置 最後から セクタ サイズ Id タイプ
/dev/sdc1 8192 61341695 61333504 29.3G 83 Linux
#

②/dev/sdc1をコピーする

# dd if=/dev/sdc1 of=disk.img bs=1G

# ls -l
-rw-r--r-- 1 root root 31402754048 1月 16 17:45 disk.img
#

③fsckで修正

# e2fsck -f disk.img

④ファイルシステムをリサイズ(8GBとした)

# resize2fs disk.img 8G
resize2fs 1.44.1 (24-Mar-2018)
Resizing the filesystem on disk.img to 2097152 (4k) blocks.
The filesystem on disk.img is now 2097152 (4k) blocks long.
# ls -l
-rw-r--r-- 1 root root 8589934592 1月 16 20:00 disk.img
#

disk.imgはファイルシステムなのでmountして中身を参照することができる(必要ならファイルをバックアップする)

# mount disk.img /mnt
# ls -l /mnt
合計 80
lrwxrwxrwx 1 root root 7 5月 6 2021 bin -> usr/bin
drwxr-xr-x 4 root root 4096 9月 5 20:28 boot
drwxr-xr-x 2 root root 4096 5月 8 2021 dev
drwxr-xr-x 96 root root 4096 9月 27 17:53 etc
drwxr-xr-x 13 root root 4096 6月 26 2021 home
lrwxrwxrwx 1 root root 7 5月 6 2021 lib -> usr/lib
drwx------ 2 root root 16384 5月 8 2021 lost+found
drwxr-xr-x 2 root root 4096 5月 6 2021 media
drwxr-xr-x 2 root root 4096 5月 6 2021 mnt
drwxr-xr-x 2 root root 4096 5月 6 2021 opt
drwxr-xr-x 2 root root 4096 3月 20 2021 proc
drwx------ 5 root root 4096 9月 7 20:43 root
drwxr-xr-x 3 root root 4096 5月 8 2021 run
lrwxrwxrwx 1 root root 8 5月 6 2021 sbin -> usr/sbin
drwxrwxr-x 2 root root 4096 5月 8 2021 selinux
drwxr-xr-x 3 root root 4096 8月 29 15:27 srv
drwxr-xr-x 2 root root 4096 3月 20 2021 sys
drwxrwxrwt 2 root root 4096 5月 8 2021 tmp
drwxr-xr-x 10 root root 4096 5月 6 2021 usr
drwxr-xr-x 12 root root 4096 8月 28 19:53 var
#

⑤新microSDを起動できるようにする(IPLを書き込むとかBoot strapできるようにするという)

IPLのみ書き込む方法があるのだけど思い出せなかったので(DLして初期に書き込む)OSイメージを書き込む

何で書き込んでも良いが,Windows10で利用している「Win32DiskImager」を使った

WS_20220116_01.png

⑥Ubuntuで新microSDを接続してパーティションを操作する

パーティション1を削除して新規に8Gでパーティション1を作成(つまりパーティーションサイズを変更)

# fdisk /dev/sdc

fdisk (util-linux 2.31.1) へようこそ。
ここで設定した内容は、書き込みコマンドを実行するまでメモリのみに保持されます。
書き込みコマンドを使用する際は、注意して実行してください。


コマンド (m でヘルプ): p
ディスク /dev/sdc: 29.1 GiB, 31267487744 バイト, 61069312 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0xc236f75e

デバイス 起動 開始位置 最後から セクタ サイズ Id タイプ
/dev/sdc1 8192 2744319 2736128 1.3G 83 Linux

コマンド (m でヘルプ): d
パーティション 1 を選択
パーティション 1 を削除しました。

コマンド (m でヘルプ): n
パーティションタイプ
p 基本パーティション (0 プライマリ, 0 拡張, 4 空き)
e 拡張領域 (論理パーティションが入ります)
選択 (既定値 p): p
最初のセクタ (2048-61069311, 既定値 2048): 2048
最終セクタ, +セクタ番号 または +サイズ{K,M,G,T,P} (2048-61069311, 既定値 61069311): +8G

新しいパーティション 1 をタイプ Linux、サイズ 8 GiB で作成しました。

コマンド (m でヘルプ): w
パーティション情報が変更されました。
ioctl() を呼び出してパーティション情報を再読み込みします。
ディスクを同期しています。

#

⑦リサイズしたファイルシステムを書き込む

# disk.img of=/dev/sdc1 bs=64M
128+0 レコード入力
128+0 レコード出力
8589934592 bytes (8.6 GB, 8.0 GiB) copied, 549.08 s, 15.6 MB/s
#

⑧起動確認

U-Boot SPL 2021.04-armbian (May 06 2021 - 17:50:40 +0000)
DRAM: 512 MiB
Trying to boot from MMC1



Starting kernel ...

Loading, please wait...
Starting version 241
Begin: Loading essential drivers ... done.
Begin: Running /scripts/init-premount ... done.
Begin: Mounting root file system ... Begin: Running /scripts/local-top ... done.
Begin: Running /scripts/local-premount ... Scanning for Btrfs filesystems
done.
Begin: Will now check root file system ... fsck from util-linux 2.33.1
[/sbin/fsck.ext4 (1) -- /dev/mmcblk0p1] fsck.ext4 -a -C0 /dev/mmcblk0p1
/dev/mmcblk0p1: clean, 46546/762880 files, 611829/2097152 blocks
done.
done.
Begin: Running /scripts/local-bottom ... done.
Begin: Running /scripts/init-bottom ... done.

Welcome to Armbian 21.08.1 Buster!



[ OK ] Started Authorization Manager.
[FAILED] Failed to start LSB: DHCP server.
See 'systemctl status isc-dhcp-server.service' for details.
[ OK ] Started LSB: RPi-Monitor daemon.
[ OK ] Reached target Multi-User System.
[ OK ] Reached target Graphical Interface.
Starting Update UTMP about System Runlevel Changes...
[ OK ] Started Update UTMP about System Runlevel Changes.

Armbian 21.08.1 Buster ttyS0

nanopi login:

(※)ネットワークに接続していないのでDHCPがエラーとなっている

復旧

結果,新しいOSバージョンで運用したかったので手段1で復旧させている

バックアップ用に手段2のmicroSDは保管

NanoPi NEOサーバ異常による通信障害発生

タブレットの無線LANが接続できず調査したところDNS・DHCPサーバーの異常であった

つい最近長い間確認してなかったので心配して確認したところ問題なしだったのだが突如としてダウンしたようだ

再起動しても復旧しなかったため重大な問題であるが,旧対応サーバであるWebサーバを代替えとして一時的に復旧できている

これは即座に対応できる代替えサーバを準備しておかないとならないようだ

二重化も視野にいれてみるかな

20年前のMO

2000年以前のデジカメのデータがバックアップされていたディスクから紛失しており以前から探していた

ほとんど諦めていたが,もしかするとスマートメディア(DS-10の格納媒体)に残っているかもしれないと保管していた箱を見てみると写真をバックアップしたMOが見つかった

IMG_20211030_153044.jpg

そういえばこの頃はMO(230MB)にバックアップしていたのだった

その後MOでは容量不足になったためカートリッジ化したHDD(IDE時)に変更してバックアップ,HDDがSATAになって1TBを超えたあたりからUSB3接続の外付けディスクに(現在に至る)バックアップしている

早速,前々から確保していたUSBのMOドライブ(BUFFALO MO-C640U2)で読み込みしてみる

IMG_20211030_152657.jpg

MOの媒体は100年持つとバックアップに最適の媒体と言われていたので心配はしていなかったがドライブの方が長年動作させていなかったので心配・・・だったが読めた!

WS_20211030_01.png

中からGatewayやSONYの初期ノート,Print-itの画像が残っていた

DSC00014.JPGDSC00027.JPGDSC00031.JPG

新しいバックアップメディアへ移行させて完了

MOもこのままバックアップメディアとして確保しておく

(旧MOドライブ)

昔,利用していたMOドライブは破棄しないで置いてある

IMG_20211030_152840.jpg

MOの出始めで230MBのドライブ,TOWTOPで購入したバルクで50K程したと記憶している

IMG_20211030_152908.jpg

I/FはSCSI,PCIのSCSIボードもどこかに置いてあるはずだが動作するかどうかは不明

IMG_20211030_152850.jpg

1995年製,時代の進歩を感じる

後のギガクラスでは改善されているが,230MB時のMOは書込み時間が酷く遅かった(MOはデータ書き換え時に磁力の方向を整列する必要があるため書込みに最低3回転必要だった)

FDより遅かったじゃないのかなw

ユーティリティ

検索

エントリー検索フォーム
キーワード

過去ログ

Feed