Help us understand the problem. What is going on with this article?

HDDが一個しかないサーバで後からraid1を構築(その1)

More than 5 years have passed since last update.

サーバのお引越しを予定していましたが、新しいサーバを頂けなくなったので今動いてるサーバでがんばって言われたみゅみゅです。
今動いているサーバはHDDが一台しかなく、HDDが壊れたら終了です。
せめてミラーでも組まないと精神衛生上よくない上に夜も熟睡できません。

そんなわけで稼働中の単一HDDのサーバをraid1のミラーに変更したいと思います。

前回 raid1を構築しましたので、最終的には最後の図のようになればいいのかなぁ~ と

現在のHDDの状態

現在のHDDの構成を確認します。

root@mdtest:~# parted -l
モデル: ATA VBOX HARDDISK (scsi)
ディスク /dev/sda: 8590MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos

番号  開始    終了    サイズ  タイプ    ファイルシステム  フラグ
 1    1049kB  256MB   255MB   primary   ext2              boot
 2    257MB   8589MB  8332MB  extended
 5    257MB   8589MB  8332MB  logical                     lvm


モデル: Linux device-mapper (linear) (dm)
ディスク /dev/mapper/mdtest--vg-swap_1: 533MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: loop

番号  開始   終了   サイズ  ファイルシステム  フラグ
 1    0.00B  533MB  533MB   linux-swap(v1)


モデル: Linux device-mapper (linear) (dm)
ディスク /dev/mapper/mdtest--vg-root: 7764MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: loop

番号  開始   終了    サイズ  ファイルシステム  フラグ
 1    0.00B  7764MB  7764MB  ext4

root@mdtest:~# df -k
Filesystem                  1K-blocks    Used Available Use% Mounted on
/dev/mapper/mdtest--vg-root   7331536 1284088   5651980  19% /
none                                4       0         4   0% /sys/fs/cgroup
udev                           239576       4    239572   1% /dev
tmpfs                           50152     472     49680   1% /run
none                             5120       0      5120   0% /run/lock
none                           250748       0    250748   0% /run/shm
none                           102400       0    102400   0% /run/user
/dev/sda1                      240972   38103    190428  17% /boot

デバイスは3つ
- /dev/sda (物理)
- /dev/mapper/mdtest--vg-swap_1 (LVM)
- /dev/mapper/mdtest--vg-root (LVM)

/dev/sda1は /bootにマウントされています。

LVMの状態を確認

root@mdtest:~# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda5
  VG Name               mdtest-vg
  PV Size               7.76 GiB / not usable 2.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              1986
  Free PE               8
  Allocated PE          1978
  PV UUID               PfeUP8-vYhu-d2Gq-7VDz-ijQ8-eV58-AFN2k6

root@mdtest:~# vgdisplay
  --- Volume group ---
  VG Name               mdtest-vg
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               7.76 GiB
  PE Size               4.00 MiB
  Total PE              1986
  Alloc PE / Size       1978 / 7.73 GiB
  Free  PE / Size       8 / 32.00 MiB
  VG UUID               xMRo8d-aZYP-wWWB-qtDF-6ilb-4AkC-Xow59q

root@mdtest:~# lvdisplay
  --- Logical volume ---
  LV Path                /dev/mdtest-vg/root
  LV Name                root
  VG Name                mdtest-vg
  LV UUID                8CuLA2-erMg-Y893-V2k6-SKzP-tuXg-jrqltn
  LV Write Access        read/write
  LV Creation host, time mdtest, 2015-05-21 12:47:15 +0900
  LV Status              available
  # open                 1
  LV Size                7.23 GiB
  Current LE             1851
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:0

  --- Logical volume ---
  LV Path                /dev/mdtest-vg/swap_1
  LV Name                swap_1
  VG Name                mdtest-vg
  LV UUID                53OCrI-0NZ6-NDcJ-gHEF-WmWO-ZDG1-7nYtt8
  LV Write Access        read/write
  LV Creation host, time mdtest, 2015-05-21 12:47:15 +0900
  LV Status              available
  # open                 2
  LV Size                508.00 MiB
  Current LE             127
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:1

いつもの3つのコマンドです。
【/dev/sda5】から【mdtest-vg】を作りそれぞれrootとswapの論理デバイスを構築です。
。。。よくわからないので図を書いてみると
raidその1.png
前回の図の使いまわしです。
RAIDデバイスはないのでこんな感じです。

これにまずはHDDを一個取り付けてみましょう。
取り付けて起動してみると

root@mdtest:~# dmesg | grep sdb
[    1.581832] sd 3:0:0:0: [sdb] 16777216 512-byte logical blocks: (8.58 GB/8.00 GiB)
[    1.583935] sd 3:0:0:0: [sdb] Write Protect is off
[    1.584693] sd 3:0:0:0: [sdb] Mode Sense: 00 3a 00 00
[    1.585423] sd 3:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[    1.587692]  sdb: unknown partition table
[    1.588392] sd 3:0:0:0: [sdb] Attached SCSI disk

なんか[unknown partition table]でsdbが認識
まず、こいつをraid1の片肺として認識させます。
・・・RAIDを作るのにmdadmがない言われたのでまずはmdadmのインストール

root@mdtest:~# apt-get install mdadm

接続したHDDのサイズが2TB以下なのでラベルを【msdos】で設定
(2TB以上ならラベル名は【gpt】です)

root@mdtest:~# parted /dev/sdb
GNU Parted 2.3
/dev/sdb を使用
GNU Parted へようこそ! コマンド一覧を見るには 'help' と入力してください。
(parted) print
エラー: /dev/sdb: ディスクラベルが認識できません。
(parted) mklabel msdos
(parted) print
モデル: ATA VBOX HARDDISK (scsi)
ディスク /dev/sdb: 8590MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos

番号  開始  終了  サイズ  タイプ  ファイルシステム  フラグ

(parted) mkpart
パーティションの種類?  primary/プライマリ/extended/拡張? primary
ファイルシステムの種類?  [ext2]?
開始? 1049kB
終了? 8589MB
(parted) set 1 raid on
(parted) set 1 boot on
(parted) print
モデル: ATA VBOX HARDDISK (scsi)
ディスク /dev/sdb: 8590MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos

番号  開始    終了    サイズ  タイプ   ファイルシステム  フラグ
 1    1049kB  8590MB  8589MB  primary                    boot, raid
(parted) q
通知: 必要であれば /etc/fstab を更新するのを忘れないようにしてください。

サイズは前回のコピペです。
raidやらbootのフラグを忘れないでください。

次にraid1を行うので、mdを作って先ほど作った/dev/sdb1をぶち込みます。

root@mdtest:~# mdadm -C /dev/md0 -l1 -n2 /dev/sdb1 missing
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
Continue creating array?
Continue creating array? (y/n) y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
root@mdtest:~#

なんか注意を受けたけど気にせずに
-l1 → raid 1
-n2 → HDD2個使うよ
missing → 二つ使うって言ったけ一つしか用意してないんだー だからブランクにしといて

できたと思われる/dev/md0を確認

root@mdtest:~# mdadm --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Thu May 21 15:47:58 2015
     Raid Level : raid1
     Array Size : 8383424 (8.00 GiB 8.58 GB)
  Used Dev Size : 8383424 (8.00 GiB 8.58 GB)
   Raid Devices : 2
  Total Devices : 1
    Persistence : Superblock is persistent

    Update Time : Thu May 21 15:47:58 2015
          State : clean, degraded
 Active Devices : 1
Working Devices : 1
 Failed Devices : 0
  Spare Devices : 0

           Name : mdtest:0  (local to host mdtest)
           UUID : 78f1d07c:f84952e0:44ebf35c:aa20c469
         Events : 0

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       0        0        1      removed

なんとなく出来てるっぽい
/dev/md0にパーティションを作ってみる

root@mdtest:~# parted /dev/md0
GNU Parted 2.3
/dev/sdb を使用
GNU Parted へようこそ! コマンド一覧を見るには 'help' と入力してください。
(parted) print
エラー: /dev/sdb: ディスクラベルが認識できません。
(parted) mklabel msdos
(parted) print
モデル: Linux Software RAID Array (md)
ディスク /dev/md0: 8585MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos

番号  開始  終了  サイズ  タイプ  ファイルシステム  フラグ

(parted) mkpart
パーティションの種類?  primary/プライマリ/extended/拡張? primary
ファイルシステムの種類?  [ext2]? ext2
開始? 2048s
終了? 255MB
(parted) print
モデル: Linux Software RAID Array (md)
ディスク /dev/md0: 8585MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos

番号  開始    終了   サイズ  タイプ   ファイルシステム  フラグ
 1    1049kB  255MB  254MB   primary

(parted) mkfs 1 ext2
警告: ファイルシステムに対して parted による操作(mkfs)を行おうとしています。
parted のファイルシステム操作コードは、e2fsprogs のようなファイルシステム専
用のものほど堅固に作られていません。可能なかぎり parted をパーティションテー
ブルの操作だけに用いることをお勧めします。ほとんどのファイルシステムに
対するほとんどの操作は今後のリリースで削除される予定です。
警告: いま存在しているファイルシステムは破壊され、このパーティションの全データが失われます。続行しますか?
はい(Y)/Yes/いいえ(N)/No? y
パーティション番号? 1
ファイルシステムの種類?  [ext2]? ext2
(parted) print
モデル: Linux Software RAID Array (md)
ディスク /dev/md0: 8585MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos

番号  開始    終了   サイズ  タイプ   ファイルシステム  フラグ
 1    1049kB  255MB  254MB   primary  ext2

(parted) mkpart
パーティションの種類?  primary/プライマリ/extended/拡張? extended
開始? 255MB
終了? -1s
(parted) print
モデル: Linux Software RAID Array (md)
ディスク /dev/md0: 8585MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos

番号  開始    終了    サイズ  タイプ    ファイルシステム  フラグ
 1    1049kB  255MB   254MB   primary   ext2
 2    255MB   8585MB  8330MB  extended                    lba

(parted) set 2 lba off
(parted) print
モデル: Linux Software RAID Array (md)
ディスク /dev/md0: 8585MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos

番号  開始    終了    サイズ  タイプ    ファイルシステム  フラグ
 1    1049kB  255MB   254MB   primary   ext2
 2    255MB   8585MB  8330MB  extended

(parted) mkpart logical 499712s 16766847s
(parted) unit MB
(parted) print
モデル: Linux Software RAID Array (md)
ディスク /dev/md0: 8585MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos

番号  開始    終了    サイズ  タイプ    ファイルシステム  フラグ
 1    1.05MB  255MB   254MB   primary   ext2
 2    255MB   8585MB  8330MB  extended
 5    256MB   8585MB  8329MB  logical

(parted) set 5 lvm on
(parted) print
モデル: Linux Software RAID Array (md)
ディスク /dev/md0: 8585MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos

番号  開始    終了    サイズ  タイプ    ファイルシステム  フラグ
 1    1.05MB  255MB   254MB   primary   ext2
 2    255MB   8585MB  8330MB  extended
 5    256MB   8585MB  8329MB  logical                     lvm

「警告: 操作の結果できるパーティションはアライメントが正しくないためにパフォーマンスがでません。」
こんなメッセージが色々でてきてめんどくさかったー
調べてみたら、パーティションの開始を2048シリンダーで割り切れる数なら怒られないということで、途中で

unit s ← printの表示をシリンダー数に変更

これでシリンダー単位で計算してパーティションを作りました。
(なので無駄が多いです!)

mdにパーティションを切りましたのでデバイスが出来てるはず

root@mdtest:~# ls -al /dev/md*
brw-rw---- 1 root disk   9, 0  5月 21 16:39 /dev/md0
brw-rw---- 1 root disk 259, 0  5月 21 16:13 /dev/md0p1
brw-rw---- 1 root disk 259, 2  5月 21 16:31 /dev/md0p2
brw-rw---- 1 root disk 259, 3  5月 21 16:31 /dev/md0p5

デバイスが出来てました。

念の為、bootに使うところをext2でファイルシステム作成

root@mdtest:~# mkfs.ext2 /dev/md0p1

/bootの中身をすべてコピー

root@mdtest:~# cd /
root@mdtest:/# mkdir newboot
root@mdtest:/# mount /dev/md0p1 newboot
root@mdtest:/# cp -dpr /boot/* newboot/

/bootのマウント先をマウントを新しく作った/dev/md0p1に変更

root@mdtest:/# tune2fs -l /dev/md0p1 | grep UUID
Filesystem UUID:          9a08b33b-aba8-4b9d-b6ed-8423117a76d2
root@mdtest:/# vi /etc/fstab

/bootのマウントポイントが変わったのを確認

root@mdtest:/# umount newboot
root@mdtest:/# umount /boot
root@mdtest:/# rmdir newboot
root@mdtest:/# mount /boot
root@mdtest:/# df -k
Filesystem                  1K-blocks    Used Available Use% Mounted on
/dev/mapper/mdtest--vg-root   7331536 1291548   5644520  19% /
none                                4       0         4   0% /sys/fs/cgroup
udev                           239576       8    239568   1% /dev
tmpfs                           50152     504     49648   2% /run
none                             5120       0      5120   0% /run/lock
none                           250748       0    250748   0% /run/shm
none                           102400       0    102400   0% /run/user
/dev/md0p1                     239979   38492    189097  17% /boot

新しいHDDにgrabを入れて、古いHDDのbootフラグを落とします。

root@mdtest:/# grub-install /dev/sdb
Installing for i386-pc platform.
grub-install: warning: Couldn't find physical volume `(null)'. Some modules may be missing from core image..
grub-install: warning: Couldn't find physical volume `(null)'. Some modules may be missing from core image..
Installation finished. No error reported.
root@mdtest:/# update-grub
Generating grub configuration file ...
Linux イメージを見つけました: /boot/vmlinuz-3.16.0-30-generic
Found initrd image: /boot/initrd.img-3.16.0-30-generic
/usr/sbin/grub-probe: warning: Couldn't find physical volume `(null)'. Some modules may be missing from core image..
/usr/sbin/grub-probe: warning: Couldn't find physical volume `(null)'. Some modules may be missing from core image..
/usr/sbin/grub-probe: warning: Couldn't find physical volume `(null)'. Some modules may be missing from core image..
/usr/sbin/grub-probe: warning: Couldn't find physical volume `(null)'. Some modules may be missing from core image..
/usr/sbin/grub-probe: warning: Couldn't find physical volume `(null)'. Some modules may be missing from core image..
/usr/sbin/grub-probe: warning: Couldn't find physical volume `(null)'. Some modules may be missing from core image..
Found memtest86+ image: /memtest86+.elf
Found memtest86+ image: /memtest86+.bin
完了

root@mdtest:/# parted /dev/sda set 1 boot off

これでrebootを行って立ち上がればbootはOKです。
ただし、私が使ってるのはOracle Virtual Boxでbootフラグを落としても、一番目のHDDを見に行って起動するそうです。
(一番目のHDDに起動の設定がなければ、起動できませんってことで終了)
なので、立ち上がるときに【F12】を押して
20150520-14.png
こんな画面を出して、2番目のHDDを選択(2を押す)
これで、2番目のHDDから起動を開始します。

リブート後

root@mdtest:~# ls -al /dev/md*
brw-rw---- 1 root disk   9, 127  5月 21 17:14 /dev/md127
brw-rw---- 1 root disk 259,   0  5月 21 17:14 /dev/md127p1
brw-rw---- 1 root disk 259,   1  5月 21 17:14 /dev/md127p2
brw-rw---- 1 root disk 259,   2  5月 21 17:14 /dev/md127p5

/dev/md:
合計 0
drwxr-xr-x  2 root root  120  5月 21 17:14 .
drwxr-xr-x 17 root root 4280  5月 21 17:14 ..
lrwxrwxrwx  1 root root    8  5月 21 17:14 mdtest:0 -> ../md127
lrwxrwxrwx  1 root root   10  5月 21 17:14 mdtest:0p1 -> ../md127p1
lrwxrwxrwx  1 root root   10  5月 21 17:14 mdtest:0p2 -> ../md127p2
lrwxrwxrwx  1 root root   10  5月 21 17:14 mdtest:0p5 -> ../md127p5

なんか色々と名前が書き換わってる。。。
(md0 → md127 あとへんなリンク貼られてる。。。)

root@mdtest:~# df -k
Filesystem                  1K-blocks    Used Available Use% Mounted on
/dev/mapper/mdtest--vg-root   7331536 1292032   5644036  19% /
none                                4       0         4   0% /sys/fs/cgroup
udev                           239384       4    239380   1% /dev
tmpfs                           50152     504     49648   2% /run
none                             5120       0      5120   0% /run/lock
none                           250748       0    250748   0% /run/shm
none                           102400       0    102400   0% /run/user
/dev/md127p1                   239979   38497    189092  17% /boot

とりあえず図で書くとここまでできました。

raidその1 (1).png

次は残りの部分を作成していきたいと思います。

miyumiyu
virtualcast
VRシステム(バーチャルキャスト)の開発、運営、企画
https://virtualcast.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした