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 -
TrackBack URL:
[修正版] ディスクスペースを拡張してみる@物理ディスク
前回日記で書いた「ディスクスペースを拡張してみる@物理ディスク」だが、一部間違いがあったのでここに書き直す。
ディスクスペースを拡張してみる@物理ディスク

ここでは「スライス自体が本来のディスクサイズよりも小さいもの」を対象に説明している。

つまりはこんな状態。
% gpart show -lp ada3
=>      63  16777153    ada3  MBR  (8.0G)
        63  10485657  ada3s1  freebsd-ufs  [active]  (5.0G)
  10485720   6291496          - free -  (3.0G)  ←★余ってる!

% gpart show -lp ada3s1
=>       0  10485657   ada3s1  BSD  (5.0G)  ←★余ってる!
         0        16           - free -  (8.0K)
        16  10485641  ada3s1d  freebsd-ufs  (5.0G)  ←★余ってる!
gpart show の -lp はスライス・パーティションをインデックス番号ではなくデバイスノード名 (ada3s1d とか) で表示する。

よくある例として、gmirror で小さいディスクに大きいディスクを使用した場合。
この場合、スライスの大きさそのものが小さくなっているので resize する時はスライスとパーティションの両方を resize する必要がある。

まずはスライスを大きくする。
% gpart show -l ada3
=>      63  16777153  ada3  MBR  (8.0G)
        63  10485657     1  freebsd-ufs  [active]  (5.0G)
  10485720   6291496        - free -  (3.0G)
gpart resize でサイズを大きくするが、対象の選択はインデックス番号を使用する。

今回は上の例だと、スライスを大きくする対象のインデックス番号は "freebsd [active] (5.0G)" の前にある "1" がそれなので -i 1 となる。
サイズ指定については gpart が増やせる最大値を勝手に判断するので特に指定する必要は無い。
% sudo gpart resize -i 1 ada3
ada3s1 resized

% gpart show -l ada3
=>      63  16777153  ada3  MBR  (8.0G)
        63  16777153     1  (null)  [active]  (8.0G)
大きくなりました :)

次にパーティション。
% gpart show -l ada3s1
=>       0  16777153  ada3s1  BSD  (8.0G)
         0        16          - free -  (8.0K)
        16  10485641       4  freebsd-ufs  (5.0G)
  10485657   6291496          - free -  (3.0G)
今度は "freebsd-ufs (5.0G)" の前にある "4" なので、-i 4 で指定する。
% sudo gpart resize -i 4 ada3s1
ada3s1d resized

% gpart show -l ada3s1
=>       0  16777153  ada3s1  BSD  (8.0G)
         0        16          - free -  (8.0K)
        16  16777137       4  freebsd-ufs  (8.0G)
大きくなりました :)

ここで慌ててマウントしてもまだ容量は増えてません。
% sudo mount /dev/ada3s1d /mnt

% df /mnt
Filesystem   1K-blocks  Used   Avail Capacity  Mounted on
/dev/ada3s1d   5061568 21992 4634652     0%    /mnt
増やした分は growfs で実際に使えるようにしなければならない。

まずはテスト。
-N で増やせるかどうかを確認。
% sudo growfs -N /dev/ada3s1d
super-block backups (for fsck_ffs -b #) at:
 11542656, 12825152, 14107648, 15390144, 16672640
ここで
growfs: requested size **GB is not larger than the current filesystem size **GB
とか出たら増やせないので諦めましょう。
(そんなことは無いはずだけど…)

増やせることが確認出来たら -N を無くして実行。
% sudo growfs /dev/ada3s1d
It's strongly recommended to make a backup before growing the file system.
OK to grow filesystem on /dev/ada3s1d from 5.0GB to 8.0GB? [yes/no]
「ファイルシステムを拡張する前にバックアップは取れよ!
 増やしていいかい?」

と聞いてくるので、お祈りしながら "yes" を打ち込む。
% sudo growfs /dev/ada3s1d
It's strongly recommended to make a backup before growing the file system.
OK to grow filesystem on /dev/ada3s1d from 5.0GB to 8.0GB? [yes/no] yes
super-block backups (for fsck_ffs -b #) at:
 11542656, 12825152, 14107648, 15390144, 16672640
すると増やした部分のみ newfs される。
これで拡張は完了だ。
% sudo mount /dev/ada3s1d /mnt

% df /mnt
Filesystem   1K-blocks  Used   Avail Capacity  Mounted on
/dev/ada3s1d   8106676 21992 7436152     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*

最終:2019/10/06 04:34:55 カテゴリ:雑記 
タグ:鯖管理
  - NO COMMENT -
TrackBack URL:
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
ツーリング ドライブ兼野外撮影予定リスト