usbディスクをマウントする時にmdadmと相性が悪い事が判明

2019年5月8日

テクノロジー

大容量HDDが安価になってきて、時代はTBは当たり前になってきました。 実際、1TBのデータをコピーしようとすると、とてつもない時間を有するのですが、それでも、データは減ることは無く、膨らみ続けていきます。 みなさんは、自分のデータをどのように管理していますか? スマホのデータは、AppleやGoogleのストレージサービスを利用しているかと思いますが、無料枠はどこも5GBぐらいで、ハナクソぐらいの容量しか無いため、写真や動画をよく撮る人であれば、ソッコーでいっぱいになってしまいます。 そして有料の1TBぐらいのプランに入らざるをえないのですが、Dropboxもevernoteも個人的には、どのストレージも漏洩の心配もさることながら、サブスクリプションモデルを使い続けるぐらいなら、自宅でHDDを構築したほうが電気代はかかるけどよっぽど便利に扱えるというのはエンジニアならではの思考かもしれません。

Raid10をUSBでサーバーにつないだ結果・・・

以前に8TBを4台購入してきて、Raid10環境を構築したという事をブログに書きましたが、 [Server] 大容量ディスク(8TB)を4台購入してRaid10構築(自宅NAS)にチャレンジ 構築はできたのだが、大きな問題として、再起動したら、Raidドライブが認識されないという事態になっていました。 色々なサイトを調査しながら、mdadmで構築したRaid10ドライブを再起動しても問題なく、サーバーが認識するための長い道のり(実際には1日フルぐらい)をご紹介します。

フォーマットが終わってからの作業

前回記事で、フォーマットをするまでの手順を紹介していますが、フォーマットが完了してから何をすればいいかを書いていませんでした。 フォーマットが終わったことを確認するには、次のコマンで行います。 cat /proc/mdstat Personalities : [raid10] md0 : active raid10 sdc1[0] sdf1[3] sde1[2] sdd1[1] 15627788288 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU] bitmap: 2/117 pages [8KB], 65536KB chunk unused devices: <none> そして、ディスクの情報を見るには以下のコマンドです。 $ mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Fri Apr 19 07:18:49 2019 Raid Level : raid10 Array Size : 15627788288 (14903.82 GiB 16002.86 GB) Used Dev Size : 7813894144 (7451.91 GiB 8001.43 GB) Raid Devices : 4 Total Devices : 4 Persistence : Superblock is persistent Intent Bitmap : Internal Update Time : Wed May 1 12:33:55 2019 State : active Active Devices : 4 Working Devices : 4 Failed Devices : 0 Spare Devices : 0 Layout : near=2 Chunk Size : 512K Name : debian:0 (local to host debian) UUID : dfd3c5c7:600d865d:a4d628f7:66fe6232 Events : 175917 Number Major Minor RaidDevice State 0 8 33 0 active sync set-A /dev/sdc1 1 8 49 1 active sync set-B /dev/sdd1 2 8 65 2 active sync set-A /dev/sde1 3 8 81 3 active sync set-B /dev/sdf1 他にもシステムの全てのストレージを確認するには、以下のコマンドです。 $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 238.5G 0 disk ├─sda1 8:1 0 230.5G 0 part / ├─sda2 8:2 0 1K 0 part └─sda3 8:3 0 1023.5K 0 part sdb 8:16 0 7.3T 0 disk /mnt/usb sdc 8:32 0 7.3T 0 disk └─sdc1 8:33 0 7.3T 0 part └─md0 9:0 0 14.6T 0 raid10 sdd 8:48 0 7.3T 0 disk └─sdd1 8:49 0 7.3T 0 part └─md0 9:0 0 14.6T 0 raid10 sde 8:64 0 7.3T 0 disk └─sde1 8:65 0 7.3T 0 part └─md0 9:0 0 14.6T 0 raid10 sdf 8:80 0 7.3T 0 disk └─sdf1 8:81 0 7.3T 0 part └─md0 9:0 0 14.6T 0 raid10 さらにパーティションの確認をするには以下のコマンド $ cat /proc/partitions major minor #blocks name 8 0 250059096 sda 8 1 241690624 sda1 8 2 1 sda2 8 3 1023 sda3 8 16 7814026584 sdb 8 32 7814026584 sdc 8 33 7814025216 sdc1 8 48 7814026584 sdd 8 49 7814025216 sdd1 8 80 7814026584 sdf 8 81 7814025216 sdf1 8 64 7814026584 sde 8 65 7814025216 sde1 9 0 15627788288 md0 さらに、uuidの確認をするには・・・ $ ls -l /dev/disk/by-uuid/ lrwxrwxrwx 1 root root 9 5月 1 18:41 194c208e-4ad4-4c0c-a21c-db3bafb20dcb -> ../../sdb lrwxrwxrwx 1 root root 9 5月 1 18:42 253f25c0-2761-463e-8108-2799b08fac61 -> ../../md0 lrwxrwxrwx 1 root root 10 5月 1 18:41 8d696f8b-590c-4302-8bb1-4d807f2d39c2 -> ../../sda1 こんな情報も見ることができます。 そして、起動時にマウントを自動でやってもらうには、/etc/fstabに以下のような情報を追記しておきます。 $ vi /etc/fstab /dev/md0 /mnt/usb2 ext4 defaults 0 0 ちゃんと登録できたら、fstabのマウントを確認するには以下のコマンドを実行します。 $ mount -a 無事にマウント出来ていることを確認しましょう。 $ df -lha ファイルシス サイズ 使用 残り 使用% マウント位置 rootfs - - - - / sysfs 0 0 0 - /sys proc 0 0 0 - /proc udev 10M 0 10M 0% /dev devpts 0 0 0 - /dev/pts tmpfs 808M 9.5M 799M 2% /run /dev/sda1 227G 43G 173G 20% / securityfs 0 0 0 - /sys/kernel/security tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup cgroup 0 0 0 - /sys/fs/cgroup/systemd pstore 0 0 0 - /sys/fs/pstore cgroup 0 0 0 - /sys/fs/cgroup/cpuset cgroup 0 0 0 - /sys/fs/cgroup/cpu,cpuacct cgroup 0 0 0 - /sys/fs/cgroup/devices cgroup 0 0 0 - /sys/fs/cgroup/freezer cgroup 0 0 0 - /sys/fs/cgroup/net_cls,net_prio cgroup 0 0 0 - /sys/fs/cgroup/blkio cgroup 0 0 0 - /sys/fs/cgroup/perf_event systemd-1 - - - - /proc/sys/fs/binfmt_misc hugetlbfs 0 0 0 - /dev/hugepages mqueue 0 0 0 - /dev/mqueue debugfs 0 0 0 - /sys/kernel/debug /dev/sdb 7.3T 5.8T 1.2T 84% /mnt/usb /dev/md0 15T 9.1M 14T 1% /mnt/usb2 binfmt_misc 0 0 0 - /proc/sys/fs/binfmt_misc 色々なドライブを読み込んでいるのですが、/dev/md0がちゃんとマウントできているのが分かります。 そして再起動してみて、最終確認してみたところ・・・起動障害を興して、レスキューモードでしか立ち上がりませんでした・・・orz fstabに追記した記述をコメントアウトして立ち上げ直したところ、起動はできるが、「/dev/md0」が消えていました。 しかし心配しなくても大丈夫です。一度フォーまっtおしたraidドライブは以下のコマンドで復活できます。 mdadm -A /dev/md0 /dev/sd[cdef]1 さらにその後で、マウントも正常に行なえます。

原因究明

どうやら、mdadm.confにuuidなどの情報を追加しておくのがセオリーのようですが、今回のドライブは外付けハードディスク(4枚入り)のものだったため、usbで接続してありました。 md0を起動時に設定するのは、mdadmの仕事なのですが、どうやらudbが起動するよりも前に処理をしているらしく、どのような設定をしても、usbで接続している限り、mdadmが起動時に自動認識してくれる事はなさそうです。 biosで、hddよりも再起にusbを読み込ませて見ても駄目で、やはりosのブート処理で順番変更ができないと手の打ちようがありません。

解決方法

これを解決するには、起動時にコマンドを実行できる、「/etc/rc.local」ファイルに起動したタイミングで発動させるスクリプトを記述するのが一番はやく確実な方法であることが判明しました。 $ vi /etc/rc.local mdadm -A /dev/md0 /dev/sd[cdef]1 mount /dev/md0 /mnt/usb2 exit 0 上記のような内容で2行追記して、再起動してみたところ、無事に起動時に何もしなくてもドライブを認識した状態のままで起動することができました。 ソフトウェアRaidは、一度ちゃんと操作してみたかったので、非常に今回の作業は勉強になりましたが、扱いやすさから、HW-RAIDの外付けドライブを購入した方が、無駄な時間を費やさなくていいのでは・・・と考えずにはいられませんでした。 次回は8台装着できるドライブを買って、10TBx8台とかのチャレンジをしてみたいですね。 その頃には、10TBや12TBの販売価格が今の8TBぐらいの値段に落ち着いてきたら・・・という事が条件ですが。

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。