2019/10/06
gmirrorのディスクサイズを広げてみる(MBR)
ディスク容量の違うディスクを gmirror で使用し、その後大きなドライブを使ったときの対処法をここに残しておく。

想定している内容としては
  • ada2s1d に既にデータが存在する。
  • RAID-1 としてペアにするディスクは ada2 より大きい物を使用する (ada3)。
  • 後日その大きいサイズの HDD に容量を合わせる (ada2 = 5GB / ada3 = 8GB)。
となる。
順序としては
  1. マスターとなるディスク (小さい方) を gmirror label でメンバーに入れる。
  2. 大きいディスクを gmirror insert でメンバーに入れる。(この段階では小さいサイズに合う)
大きいディスクを手に入れたら
  1. 普通に (マルチユーザーモードで) 起動する。
  2. gmirror remove で小さいディスクをメンバーから外す。
  3. gmirror insert で新しいディスクをメンバーに入れる。
  4. 同期が完了するまで待つ。
  5. シングルユーザーモードで起動しなおす。
  6. gmirror resize で metadata を更新する。
  7. gpart resize でスライスとパーティションを広げる。
  8. growfs で広げたエリアを使えるようにする。
というフローで作業を実施。

gpart resize の使い方については「[修正版] ディスクスペースを拡張してみる@物理ディスク」を見て予習してください。
[修正版] ディスクスペースを拡張してみる@物理ディスク



まずは RAID-1 メンバーの作成。
ディスクの確認。
% fdisk ada2
(省略)
    start 63, size 10485657 (5119 Meg), flag 80 (active)
(省略)

% fdisk ada3
(省略)
    start 63, size 16776522 (8191 Meg), flag 80 (active)
(省略)
ちゃんとサイズは違ってます。

中身があることを確認。
% sudo mount /dev/ada2s1d /mnt

% ll /mnt
total 21996
drwxrwxrwx   3 root     wheel     -      512 10月  6 02:13 ./
drwxr-xr-x  23 root     wheel     -      512 10月  6 02:34 ../
drwxrwxr-x   2 root     operator  -      512 10月  6 02:12 .snap/
-rwxr--r--   1 griffon  wheel     - 22475540 10月  6 02:13 kabe-gami.zip*

% df /mnt
Filesystem   1K-blocks  Used   Avail Capacity  Mounted on
/dev/ada2s1d   5061568 21992 4634652     0%    /mnt
アンマウントしておく。
% sudo umount /mnt
RAID-1 メンバーの作成。
ここで「既存のディスクを RAID-1 化する」なら、現在使用中のディスクを先に gmirror で追加すること。
これを間違うと最悪ディスクの中身が消えます。

まずは中身が入ってるディスクをアタッチ。
ちなみにオプションは「停電またはシステムクラッシュの後に同期しない (-F)」としている。
(intel Rapid Strage Technorogy でも突然のリブートの後に同期するけど、あれをしないような感じ)
% sudo gmirror label -v -F mirror0 ada2
Metadata value stored on ada2.
Done.
念のためパーティションが存在するかを確認する。
% ll /dev/mirror/mirror0*
crw-r-----  1 root  operator  - 0x68 10月  6 02:39 /dev/mirror/mirror0
crw-r-----  1 root  operator  - 0x69 10月  6 02:39 /dev/mirror/mirror0s1
crw-r-----  1 root  operator  - 0x6b 10月  6 02:39 /dev/mirror/mirror0s1d
中身が無事かを確認する。
% sudo mount /dev/mirror/mirror0s1d /mnt

% df /mnt
Filesystem             1K-blocks  Used   Avail Capacity  Mounted on
/dev/mirror/mirror0s1d   5061568 21992 4634652     0%    /mnt

% ll /mnt
total 21996
drwxrwxrwx   3 root     wheel     -      512 10月  6 02:13 ./
drwxr-xr-x  23 root     wheel     -      512 10月  6 02:34 ../
drwxrwxr-x   2 root     operator  -      512 10月  6 02:12 .snap/
-rwxr--r--   1 griffon  wheel     - 22475540 10月  6 02:13 kabe-gami.zip*
この次に空のディスクをアタッチする。
% sudo gmirror insert -v mirror0 ada3
Done.

% gmirror status
          Name    Status  Components
mirror/mirror0  DEGRADED  ada2 (ACTIVE)
                          ada3 (SYNCHRONIZING, 55%)

% gmirror status
          Name    Status  Components
mirror/mirror0  COMPLETE  ada2 (ACTIVE)
                          ada3 (ACTIVE)
中身が無事かを確認する。
% df /mnt
Filesystem             1K-blocks  Used   Avail Capacity  Mounted on
/dev/mirror/mirror0s1d   5061568 21992 4634652     0%    /mnt

% ll /mnt
total 21996
drwxrwxrwx   3 root     wheel     -      512 10月  6 02:13 ./
drwxr-xr-x  23 root     wheel     -      512 10月  6 02:34 ../
drwxrwxr-x   2 root     operator  -      512 10月  6 02:12 .snap/
-rwxr--r--   1 griffon  wheel     - 22475540 10月  6 02:13 kabe-gami.zip*
gmirror はディスクサイズが異なる物をペアにした場合、一番小さい物に合わせられる。
% gmirror list
Geom name: mirror0
State: COMPLETE
Components: 2
Balance: load
Slice: 4096
Flags: NOFAILSYNC
GenID: 0
SyncID: 1
ID: 414357605
Type: AUTOMATIC
Providers:
1. Name: mirror/mirror0
   Mediasize: 5368708608 (5.0G) ←★RAID-1 メンバーのサイズ
   Sectorsize: 512
   Mode: r1w1e3
Consumers:
1. Name: ada2
   Mediasize: 5368709120 (5.0G) ←★ディスクのサイズ
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Priority: 0
   Flags: NONE
   GenID: 0
   SyncID: 1
   ID: 3914746213
2. Name: ada3
   Mediasize: 8589934592 (8.0G) ←★ディスクのサイズ
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Priority: 0
   Flags: NONE
   GenID: 0
   SyncID: 1
   ID: 320096764
ディスクサイズが異なっているが RAID-1 メンバーのサイズは一番小さい物に合わせられていることが確認出来る。



今度は小さいサイズの HDD を退役させ、ディスク容量を増やす。
% gmirror list
Geom name: mirror0
State: COMPLETE
Components: 2
Balance: load
Slice: 4096
Flags: NOFAILSYNC
GenID: 0
SyncID: 1
ID: 307285312
Type: AUTOMATIC
Providers:
1. Name: mirror/mirror0
   Mediasize: 5368708608 (5.0G)
   Sectorsize: 512
   Mode: r0w0e0
Consumers:
1. Name: ada2
   Mediasize: 5368709120 (5.0G)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Priority: 0
   Flags: NONE
   GenID: 0
   SyncID: 1
   ID: 317673527
2. Name: ada3
   Mediasize: 8589934592 (8.0G)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Priority: 0
   Flags: NONE
   GenID: 0
   SyncID: 1
   ID: 3541304040

% sudo gmirror remove mirror0 ada2 ←★サイズの小さいディスクを remove する。

% gmirror status
          Name    Status  Components
mirror/mirror0  COMPLETE  ada3 (ACTIVE)
※ada2 (サイズの小さいディスク) が外れました。

% gmirror list
Geom name: mirror0
State: COMPLETE
Components: 1
Balance: load
Slice: 4096
Flags: NOFAILSYNC
GenID: 0
SyncID: 1
ID: 307285312
Type: AUTOMATIC
Providers:
1. Name: mirror/mirror0
   Mediasize: 5368708608 (5.0G)
   Sectorsize: 512
   Mode: r0w0e0
Consumers:
1. Name: ada3
   Mediasize: 8589934592 (8.0G)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Priority: 0
   Flags: NONE
   GenID: 0
   SyncID: 1
   ID: 3541304040
大きいサイズのディスクのみ残っていることを確認しておく。

次に新しいディスクを刺してリビルドを実施。
(ややこしいのでデバイス名は変えます。)
% fdisk /dev/ada4
(省略)
    start 63, size 16776522 (8191 Meg), flag 80 (active)
(省略)
こいつを RAID-1 メンバーにぶっこむ。
% sudo gmirror insert -v mirror0 ada4
Done.

% gmirror status
          Name    Status  Components
mirror/mirror0  DEGRADED  ada3 (ACTIVE)
                          ada4 (SYNCHRONIZING, 70%)

% gmirror status
          Name    Status  Components
mirror/mirror0  COMPLETE  ada3 (ACTIVE)
                          ada4 (ACTIVE)

% gmirror list mirror0
Geom name: mirror0
State: COMPLETE
Components: 2
Balance: load
Slice: 4096
Flags: NOFAILSYNC
GenID: 0
SyncID: 1
ID: 1256414995
Type: AUTOMATIC
Providers:
1. Name: mirror/mirror0
   Mediasize: 5368708608 (5.0G) ←★RAID-1 メンバーのサイズ
   Sectorsize: 512
   Mode: r0w0e0
Consumers:
1. Name: ada3
   Mediasize: 8589934592 (8.0G) ←★ディスクのサイズ
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Priority: 0
   Flags: NONE
   GenID: 0
   SyncID: 1
   ID: 968255354
2. Name: ada4
   Mediasize: 8589934592 (8.0G) ←★ディスクのサイズ
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Priority: 0
   Flags: NONE
   GenID: 0
   SyncID: 1
   ID: 3468845043
この時点では過去の小さいサイズをひきずったままとなっている。

さてリサイズ。
リサイズは RAID-1 メンバーをマウントしたままでは操作できないのでシングルユーザーモードで起動してオフラインで行う。

まずは gmirror resize で RAID-1 メンバーの metadata を更新する。
これはオプション無しでやれば良きにはからってくれる。
% sudo gmirror resize -v mirror0
Done.

% gmirror list
Geom name: mirror0
State: COMPLETE
Components: 2
Balance: load
Slice: 4096
Flags: NOFAILSYNC
GenID: 0
SyncID: 1
ID: 2218697283
Type: AUTOMATIC
Providers:
1. Name: mirror/mirror0
   Mediasize: 8589934080 (8.0G) ←★RAID-1 メンバーのサイズが変わった
   Sectorsize: 512
   Mode: r1w1e1
Consumers:
1. Name: ada3
   Mediasize: 8589934592 (8.0G)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Priority: 0
   Flags: NONE
   GenID: 0
   SyncID: 1
   ID: 3801782773
2. Name: ada4
   Mediasize: 8589934592 (8.0G)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Priority: 0
   Flags: NONE
   GenID: 0
   SyncID: 1
   ID: 3565686053
広がりました。:)

次に gpart resize でパーティションを広げる。
これをやらないと広がりません。gmirror resize はあくまで metadata の更新のみのようだ。
ちょっと確認してみよう。
% sudo mount /dev/mirror/mirror0s1d /mnt
% df /mnt
Filesystem             1K-blocks  Used   Avail Capacity  Mounted on
/dev/mirror/mirror0s1d   5061568 21992 4634652     0%    /mnt
↑ほらね。

アンマウントは忘れずに。

あらかじめスライスとパーティションの中身を確認。
% gpart show -lp /dev/mirror/mirror0
=>      63  16777152    mirror/mirror0  MBR  (8.0G)
        63  10485657  mirror/mirror0s1  freebsd-ufs  [active]  (5.0G)
  10485720   6291495                    - free -  (3.0G)

% gpart show -lp /dev/mirror/mirror0s1
=>       0  10485657   mirror/mirror0s1  BSD  (5.0G)
         0        16                     - free -  (8.0K)
        16  10485641  mirror/mirror0s1d  freebsd-ufs  (5.0G)

% gpart show /dev/mirror/mirror0
=>      63  16777152  mirror/mirror0  MBR  (8.0G)
        63  10485657               1  freebsd  [active]  (5.0G)
  10485720   6291495                  - free -  (3.0G)

% gpart show /dev/mirror/mirror0s1
=>       0  10485657  mirror/mirror0s1  BSD  (5.0G)
         0        16                    - free -  (8.0K)
        16  10485641                 4  freebsd-ufs  (5.0G)
広げていきます。
まずはスライスから。
% sudo gpart resize -i 1 /dev/mirror/mirror0
mirror/mirror0s1 resized
% gpart show /dev/mirror/mirror0
=>      63  16777152  mirror/mirror0  MBR  (8.0G)
        63  16777152               1  freebsd  [active]  (8.0G)
次にパーティション。
% sudo gpart resize -i 4 /dev/mirror/mirror0s1
mirror/mirror0s1d resized
% gpart show /dev/mirror/mirror0s1
=>       0  16777152  mirror/mirror0s1  BSD  (8.0G)
         0        16                    - free -  (8.0K)
        16  16777136                 4  freebsd-ufs  (8.0G)
growfs で広げた部分を使えるようにしよう。
まずは確認。
% sudo growfs -N /dev/mirror/mirror0s1d
super-block backups (for fsck_ffs -b #) at:
 11542656, 12825152, 14107648, 15390144, 16672640
本番。
% sudo growfs /dev/mirror/mirror0s1d
It's strongly recommended to make a backup before growing the file system.
OK to grow filesystem on /dev/mirror/mirror0s1d from 5.0GB to 8.0GB? [yes/no] yes
super-block backups (for fsck_ffs -b #) at:
 11542656, 12825152, 14107648, 15390144, 16672640
マウントしてみる。
% sudo mount /dev/mirror/mirror0s1d /mnt
% df /mnt
Filesystem             1K-blocks  Used   Avail Capacity  Mounted on
/dev/mirror/mirror0s1d   8106676 21992 7436152     0%    /mnt

% ll /mnt
total 21996
drwxrwxrwx   3 root     wheel     -      512 10月  6 03:34 ./
drwxr-xr-x  23 root     wheel     -      512 10月  6 03:55 ../
drwxrwxr-x   2 root     operator  -      512 10月  6 03:33 .snap/
-rwxr--r--   1 griffon  wheel     - 22475540 10月  6 03:34 kabe-gami.zip*
拡張終わり!!


最終:2019/10/06 05:03:58 カテゴリ:雑記 
タグ:鯖管理
  - NO COMMENT -
QRコード
携帯サイト試験運用
https://griffonworks.net/nikki/cgi-bin/k.cgi
1行板

備忘録
  • 無し
物欲リスト
  • Canon RF50mm F1.2L USM
  • SIGMA 20mm F1.4 EF Art
  • ニンバス チヌーク
  • OCB-1 ST II
ツーリング ドライブ兼野外撮影予定リスト