現在 2TB 未満のディスクを使って gmirror を構築しているが、ディスク障害によるディスク交換で将来的に 2TB を超える HDD にアップグレードを考えているため、ミラーの方肺を 2TB 以上の HDD に置き換え、その後両方とも 2TB を超える HDD に揃える。といった状況の下で説明とする。
% gpart show ada2 ada2s1 ada3 => 63 10485697 ada2 MBR (5.0G) 63 10485657 1 freebsd [active] (5.0G) 10485720 40 - free - (20K) => 0 10485657 ada2s1 BSD (5.0G) 0 16 - free - (8.0K) 16 10485641 4 freebsd-ufs (5.0G) => 40 16777136 ada3 GPT (8.0G) 40 16777136 1 freebsd-ufs (8.0G) % gpart show -lp ada2 ada2s1 ada3 => 63 10485697 ada2 MBR (5.0G) 63 10485657 ada2s1 (null) [active] (5.0G) 10485720 40 - free - (20K) => 0 10485657 ada2s1 BSD (5.0G) 0 16 - free - (8.0K) 16 10485641 ada2s1d (null) (5.0G) => 40 16777136 ada3 GPT (8.0G) 40 16777136 ada3p1 (null) (8.0G) % sudo gmirror label -v mirror0 ada2s1d Metadata value stored on ada2s1d. Done. % gmirror status Name Status Components mirror/mirror0 COMPLETE ada2s1d (ACTIVE) % gmirror insert -v mirror0 ada3p1 Done. % gmirror status Name Status Components mirror/mirror0 COMPLETE ada2s1d (ACTIVE) ada3p1 (ACTIVE) % gmirror list mirror0 Geom name: mirror0 State: COMPLETE Components: 2 Balance: load Slice: 4096 Flags: NONE GenID: 0 SyncID: 1 ID: 3646045765 Type: AUTOMATIC Providers: 1. Name: mirror/mirror0 Mediasize: 5368647680 (5.0G) Sectorsize: 512 Mode: r0w0e0 Consumers: 1. Name: ada2s1d Mediasize: 5368648192 (5.0G) Sectorsize: 512 Stripesize: 0 Stripeoffset: 40448 Mode: r1w1e1 State: ACTIVE Priority: 0 Flags: NONE GenID: 0 SyncID: 1 ID: 2017605693 2. Name: ada3p1 Mediasize: 8589893632 (8.0G) Sectorsize: 512 Stripesize: 0 Stripeoffset: 20480 Mode: r1w1e1 State: ACTIVE Priority: 0 Flags: NONE GenID: 0 SyncID: 1 ID: 3326642448 % sudo mount /dev/mirror/mirror0 /mnt % df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/mirror/mirror0 5061568 28072 4628572 1% /mnt % ll /mnt total 28076 drwxrwxrwx 3 root wheel - 512 10月 9 07:40 ./ drwxr-xr-x 23 root wheel - 512 10月 8 23:22 ../ drwxrwxr-x 2 root operator - 512 10月 9 07:40 .snap/ -rwxr--r-- 1 griffon wheel - 22475540 10月 9 07:40 kabe-gami.zip* -rwxr--r-- 1 griffon wheel - 6183181 10月 9 07:40 mikofuku_dd-dy_manual.pdf* % sudo umount /mnt更にこの後に MBR パーティションを持った小さなドライブから GPT パーティションを持った大きなドライブに入れ替える場合は、MBR の小さなドライブを remove してから GPT の大きなドライブを insert して growfs で広げる。
% sudo gmirror label -v mirror0 ada2
Metadata value stored on ada2. Done. % gmirror status Name Status Components mirror/mirror0 COMPLETE ada2 (ACTIVE) % gmirror insert -v mirror0 ada3p1 Done. % gmirror status Name Status Components mirror/mirror0 COMPLETE ada2 (ACTIVE) ada3p1 (ACTIVE) % gmirror list mirror0 Geom name: mirror0 State: COMPLETE Components: 2 Balance: load Slice: 4096 Flags: NONE GenID: 0 SyncID: 1 ID: 1111266501 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: 3283235968 2. Name: ada3p1 Mediasize: 8589893632 (8.0G) Sectorsize: 512 Stripesize: 0 Stripeoffset: 20480 Mode: r1w1e1 State: ACTIVE Priority: 0 Flags: NONE GenID: 0 SyncID: 1 ID: 2283151022 % gmirror destroy mirror0 % % ll /dev/ada3* crw-r----- 1 root operator - 0x60 10月 9 06:16 /dev/ada3 crw-r----- 1 root operator - 0x67 10月 9 06:38 /dev/ada3p1 crw-r----- 1 root operator - 0x76 10月 9 07:43 /dev/ada3p1s1 crw-r----- 1 root operator - 0x88 10月 9 07:43 /dev/ada3p1s1d
% gpart destroy -F ada3 ada3 destroyed % ll /dev/ada3* crw-r----- 1 root operator - 0x60 10月 9 06:16 /dev/ada3
% gpart show ada2 ada2s1 ada3 => 63 10485697 ada2 MBR (5.0G) 63 10485657 1 freebsd [active] (5.0G) 10485720 40 - free - (20K) => 0 10485657 ada2s1 BSD (5.0G) 0 16 - free - (8.0K) 16 10485641 4 freebsd-ufs (5.0G) => 40 16777136 ada3 GPT (8.0G) 40 16777136 1 freebsd-ufs (8.0G) % gpart show -lp ada2 ada2s1 ada3 => 63 10485697 ada2 MBR (5.0G) 63 10485657 ada2s1 (null) [active] (5.0G) 10485720 40 - free - (20K) => 0 10485657 ada2s1 BSD (5.0G) 0 16 - free - (8.0K) 16 10485641 ada2s1d (null) (5.0G) => 40 16777136 ada3 GPT (8.0G) 40 16777136 ada3p1 (null) (8.0G) % sudo mount -v /dev/ada2s1d /mnt /dev/ada2s1d on /mnt (ufs, local, writes: sync 2 async 0, reads: sync 3 async 0, fsid a1f99c5d0a3d3046) % df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/ada2s1d 5061568 28072 4628572 1% /mnt % ll /mnt total 28076 drwxrwxrwx 3 root wheel - 512 10月 9 06:04 ./ drwxr-xr-x 23 root wheel - 512 10月 8 23:22 ../ drwxrwxr-x 2 root operator - 512 10月 9 06:03 .snap/ -rwxr--r-- 1 griffon wheel - 22475540 10月 9 06:04 kabe-gami.zip* -rwxr--r-- 1 griffon wheel - 6183181 10月 9 06:04 mikofuku_dd-dy_manual.pdf* % sudo umount -v /mnt /dev/ada2s1d: unmount from /mnt % sudo dd if=/dev/ada2s1d of=/dev/ada3p1 bs=2M 2559+1 records in 2559+1 records out 5368648192 bytes transferred in 2.444914 secs (2195842973 bytes/sec) % gpart show ada2 ada2s1 ada3 => 63 10485697 ada2 MBR (5.0G) 63 10485657 1 freebsd [active] (5.0G) 10485720 40 - free - (20K) => 0 10485657 ada2s1 BSD (5.0G) 0 16 - free - (8.0K) 16 10485641 4 freebsd-ufs (5.0G) => 40 16777136 ada3 GPT (8.0G) 40 16777136 1 freebsd-ufs (8.0G) % sudo mount -v /dev/ada3p1 /mnt /dev/ada3p1 on /mnt (ufs, local, writes: sync 2 async 0, reads: sync 3 async 0, fsid a1f99c5d0a3d3046) % df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/ada3p1 5061568 28072 4628572 1% /mnt % ll /mnt total 28076 drwxrwxrwx 3 root wheel - 512 10月 9 06:04 ./ drwxr-xr-x 23 root wheel - 512 10月 8 23:22 ../ drwxrwxr-x 2 root operator - 512 10月 9 06:03 .snap/ -rwxr--r-- 1 griffon wheel - 22475540 10月 9 06:04 kabe-gami.zip* -rwxr--r-- 1 griffon wheel - 6183181 10月 9 06:04 mikofuku_dd-dy_manual.pdf* % sudo umount -v /mnt /dev/ada3p1: unmount from /mnt5GB の MBR パーティションを 8GB の GPT パーティションにコピーしたら 5GB になっちゃったので広げましょう。
% gpart show ada3 => 40 16777136 ada3 GPT (8.0G) 40 16777136 1 freebsd-ufs (8.0G) % sudo growfs -N /dev/ada3p1 super-block backups (for fsck_ffs -b #) at: 11542656, 12825152, 14107648, 15390144, 16672640 % sudo growfs /dev/ada3p1 It's strongly recommended to make a backup before growing the file system. OK to grow filesystem on /dev/ada3p1 from 5.0GB to 8.0GB? [yes/no] yes super-block backups (for fsck_ffs -b #) at: 11542656, 12825152, 14107648, 15390144, 16672640 % sudo mount -v /dev/ada3p1 /mnt /dev/ada3p1 on /mnt (ufs, local, writes: sync 2 async 0, reads: sync 3 async 0, fsid a1f99c5d0a3d3046) % df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/ada3p1 8106676 28072 7430072 0% /mnt % ll /mnt total 28076 drwxrwxrwx 3 root wheel - 512 10月 9 06:04 ./ drwxr-xr-x 23 root wheel - 512 10月 8 23:22 ../ drwxrwxr-x 2 root operator - 512 10月 9 06:03 .snap/ -rwxr--r-- 1 griffon wheel - 22475540 10月 9 06:04 kabe-gami.zip* -rwxr--r-- 1 griffon wheel - 6183181 10月 9 06:04 mikofuku_dd-dy_manual.pdf* % sudo umount -v /mnt /dev/ada3p1: unmount from /mnt
% gpart show -lp ada2 ada3 => 40 10485680 ada2 GPT (5.0G) 40 10485680 ada2p1 (null) (5.0G) => 40 16777136 ada3 GPT (8.0G) 40 16777136 ada3p1 (null) (8.0G) % sudo gmirror label -v mirror0 ada2p1 Metadata value stored on ada2p1. Done. % gmirror insert -v mirror0 ada3p1 Done. % gmirror status Name Status Components mirror/mirror0 COMPLETE ada2p1 (ACTIVE) ada3p1 (ACTIVE) % gmirror list mirror0 Geom name: mirror0 State: COMPLETE Components: 2 Balance: load Slice: 4096 Flags: NONE GenID: 0 SyncID: 1 ID: 315191848 Type: AUTOMATIC Providers: 1. Name: mirror/mirror0 Mediasize: 5368667648 (5.0G) ←★小さい方に合わせられる Sectorsize: 512 Mode: r1w1e1 Consumers: 1. Name: ada2p1 Mediasize: 5368668160 (5.0G) Sectorsize: 512 Stripesize: 0 Stripeoffset: 20480 Mode: r1w1e1 State: ACTIVE Priority: 0 Flags: NONE GenID: 0 SyncID: 1 ID: 2366964925 2. Name: ada3p1 Mediasize: 8589893632 (8.0G) Sectorsize: 512 Stripesize: 0 Stripeoffset: 20480 Mode: r1w1e1 State: ACTIVE Priority: 0 Flags: NONE GenID: 0 SyncID: 1 ID: 1280267142 % sudo mount /dev/mirror/mirror0 /mnt % df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/mirror/mirror0 5061588 28072 4628592 1% /mnt % ll /mnt total 28076 drwxrwxrwx 3 root wheel - 512 10月 9 04:32 ./ drwxr-xr-x 23 root wheel - 512 10月 8 23:22 ../ drwxrwxr-x 2 root operator - 512 10月 9 04:31 .snap/ -rwxr--r-- 1 griffon wheel - 22475540 10月 9 04:32 kabe-gami.zip* -rwxr--r-- 1 griffon wheel - 6183181 10月 9 04:32 mikofuku_dd-dy_manual.pdf*今度は小さいドライブ (ada2) を外して大きなドライブ (ada4) に交換する。
% gmirror remove -v mirror0 ada2p1 Done. % gmirror status Name Status Components mirror/mirror0 COMPLETE ada3p1 (ACTIVE) % gmirror list mirror0 Geom name: mirror0 State: COMPLETE Components: 1 Balance: load Slice: 4096 Flags: NONE GenID: 0 SyncID: 1 ID: 1795428709 Type: AUTOMATIC Providers: 1. Name: mirror/mirror0 Mediasize: 5368667648 (5.0G) Sectorsize: 512 Mode: r0w0e0 Consumers: 1. Name: ada3p1 Mediasize: 8589893632 (8.0G) Sectorsize: 512 Stripesize: 0 Stripeoffset: 20480 Mode: r1w1e1 State: ACTIVE Priority: 0 Flags: NONE GenID: 0 SyncID: 1 ID: 1783526678 % gpart show ada4 => 40 16777136 ada4 GPT (8.0G) 40 16777136 1 freebsd-ufs (8.0G) % gpart show -lp ada4 => 40 16777136 ada4 GPT (8.0G) 40 16777136 ada4p1 (null) (8.0G) % gmirror insert -v mirror0 ada4p1 Done. % gmirror status Name Status Components mirror/mirror0 COMPLETE ada3p1 (ACTIVE) ada4p1 (ACTIVE) % gmirror list mirror0 Geom name: mirror0 State: COMPLETE Components: 2 Balance: load Slice: 4096 Flags: NONE GenID: 0 SyncID: 1 ID: 1795428709 Type: AUTOMATIC Providers: 1. Name: mirror/mirror0 Mediasize: 5368667648 (5.0G) Sectorsize: 512 Mode: r0w0e0 Consumers: 1. Name: ada3p1 Mediasize: 8589893632 (8.0G) Sectorsize: 512 Stripesize: 0 Stripeoffset: 20480 Mode: r1w1e1 State: ACTIVE Priority: 0 Flags: NONE GenID: 0 SyncID: 1 ID: 1783526678 2. Name: ada4p1 Mediasize: 8589893632 (8.0G) Sectorsize: 512 Stripesize: 0 Stripeoffset: 20480 Mode: r1w1e1 State: ACTIVE Priority: 0 Flags: NONE GenID: 0 SyncID: 1 ID: 2699217139 % sudo mount /dev/mirror/mirror0 /mnt % df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/mirror/mirror0 5061588 28072 4628592 1% /mnt % ll /mnt total 28076 drwxrwxrwx 3 root wheel - 512 10月 9 06:39 ./ drwxr-xr-x 23 root wheel - 512 10月 8 23:22 ../ drwxrwxr-x 2 root operator - 512 10月 9 06:39 .snap/ -rwxr--r-- 1 griffon wheel - 22475540 10月 9 06:39 kabe-gami.zip* -rwxr--r-- 1 griffon wheel - 6183181 10月 9 06:39 mikofuku_dd-dy_manual.pdf* % sudo umount /mnt % gmirror resize mirror0 % gmirror list mirror0 Geom name: mirror0 State: COMPLETE Components: 2 Balance: load Slice: 4096 Flags: NONE GenID: 0 SyncID: 1 ID: 1795428709 Type: AUTOMATIC Providers: 1. Name: mirror/mirror0 Mediasize: 8589893120 (8.0G)増えました。:)
Sectorsize: 512 Mode: r0w0e0 Consumers: 1. Name: ada3p1 Mediasize: 8589893632 (8.0G) Sectorsize: 512 Stripesize: 0 Stripeoffset: 20480 Mode: r1w1e1 State: ACTIVE Priority: 0 Flags: NONE GenID: 0 SyncID: 1 ID: 1783526678 2. Name: ada4p1 Mediasize: 8589893632 (8.0G) Sectorsize: 512 Stripesize: 0 Stripeoffset: 20480 Mode: r1w1e1 State: ACTIVE Priority: 0 Flags: NONE GenID: 0 SyncID: 1 ID: 2699217139 % growfs -N /dev/mirror/mirror0 super-block backups (for fsck_ffs -b #) at: 11542656, 12825152, 14107648, 15390144, 16672640 % sudo growfs /dev/mirror/mirror0 It's strongly recommended to make a backup before growing the file system. OK to grow filesystem on /dev/mirror/mirror0 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/mirror0 /mnt % df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/mirror/mirror0 8106672 28072 7430068 0% /mnt % ll /mnt total 28076 drwxrwxrwx 3 root wheel - 512 10月 9 06:39 ./ drwxr-xr-x 23 root wheel - 512 10月 8 23:22 ../ drwxrwxr-x 2 root operator - 512 10月 9 06:39 .snap/ -rwxr--r-- 1 griffon wheel - 22475540 10月 9 06:39 kabe-gami.zip* -rwxr--r-- 1 griffon wheel - 6183181 10月 9 06:39 mikofuku_dd-dy_manual.pdf*
% gpart show -lp ada2 ada3 => 40 10485680 ada2 GPT (5.0G) 40 10485680 ada2p1 (null) (5.0G) => 40 16777136 ada3 GPT (8.0G) 40 10485680 ada3p1 (null) (5.0G) 10485720 6291456 - free - (3.0G) % sudo mount /dev/ada2p1 /mnt % ll /mnt total 28076 drwxrwxrwx 3 root wheel - 512 10月 9 04:32 ./ drwxr-xr-x 23 root wheel - 512 10月 8 23:22 ../ drwxrwxr-x 2 root operator - 512 10月 9 04:31 .snap/ -rwxr--r-- 1 griffon wheel - 22475540 10月 9 04:32 kabe-gami.zip* -rwxr--r-- 1 griffon wheel - 6183181 10月 9 04:32 mikofuku_dd-dy_manual.pdf* % df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/ada2p1 5061588 28072 4628592 1% /mnt % sudo umount /mnt % sudo gmirror label -v mirror0 ada2 Metadata value stored on ada2. Done. % gmirror insert -v mirror0 ada3 Done. % gmirror status Name Status Components mirror/mirror0 COMPLETE ada2 (ACTIVE) ada3 (ACTIVE) % ll /dev/mirror/mirror0* crw-r----- 1 root operator - 0x6b 10月 9 04:34 /dev/mirror/mirror0 % sudo mount /dev/mirror/mirror0 /mnt mount: /dev/mirror/mirror0: Invalid argument % gmirror list Geom name: mirror0 State: COMPLETE Components: 2 Balance: load Slice: 4096 Flags: NONE GenID: 0 SyncID: 1 ID: 1623628032 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: 26546643 2. Name: ada3 Mediasize: 8589934592 (8.0G) Sectorsize: 512 Mode: r1w1e1 State: ACTIVE Priority: 0 Flags: NONE GenID: 0 SyncID: 1 ID: 66523288なんでマウントできない?と思ったら dmesg にこんなエラーが。
GEOM_MIRROR: Device mirror/mirror0 launched (1/1).とりあえず gmirror destroy してから recover しておきましょう。
GEOM: mirror/mirror0: corrupt or invalid GPT detected.
GEOM: mirror/mirror0: GPT rejected -- may not be recoverable.
GEOM_MIRROR: Device mirror0: provider destroyed.
GEOM_MIRROR: Device mirror0 destroyed.
GEOM: ada2: the secondary GPT table is corrupt or invalid.
GEOM: ada2: using the primary only -- recovery suggested.
GEOM: diskid/DISK-01000000000000000001: the secondary GPT table is corrupt or invalid.
GEOM: diskid/DISK-01000000000000000001: using the primary only -- recovery suggested.
% gmirror destroy -v mirror0 Done. % gpart show ada2 => 40 10485680 ada2 GPT (5.0G) [CORRUPT]つまりこれか。
40 10485680 - free - (5.0G) % gpart recover ada2 ada2 recovered % gpart show ada2 => 40 10485680 ada2 GPT (5.0G) ←★CORRUPTがなくなった 40 10485680 - free - (5.0G)
> gmirror(8) stores one block of metadata at the end of the disk. Because GPT partition schemes also store metadata at the end of the disk, mirroring entire GPT disks with gmirror(8) is not recommended. MBR partitioning is used here because it only stores a partition table at the start of the disk and does not conflict with the mirror metadata.つまりは GPT ディスクにパーティション切ってそれをミラーすればいいというわけで。
(和訳) gmirror(8) は、ディスクの最後に 1ブロックのメタデータを保存します。GPT パーティションスキームはディスクの最後にメタデータも保存するため、 gmirror(8) で GPT ディスク全体をミラーリングすることはお勧めしません。MBR パーティショニングは、ディスクの先頭にのみパーティションテーブルを格納し、ミラーメタデータと競合しないため、ディスク全体を使用することが出来ます。
% gpart show -lp ada2 ada3 => 40 10485680 ada2 GPT (5.0G) 40 10485680 ada2p1 freebsd-ufs (5.0G) => 40 16777136 ada3 GPT (8.0G) 40 8388608 ada3p1 freebsd-ufs (4.0G) 8388648 8388528 - free - (4.0G) % sudo gmirror label -v mirror0 ada2p1 Metadata value stored on ada2p1. Done. % gmirror insert -v mirror0 ada3p1 gmirror: Provider ada3p1 too small.どうしてもパーティションサイズを同じにしてミラーしたいということであれば gpart backup [geom] | gpart restore [geom] してもいいが、ここで疑問なのは「ちょっとでも小さい方に restore したらどうなる?」だが、ちゃんと蹴られます。
% fdisk ada2 (省略) start 63, size 10485657 (5119 Meg), flag 80 (active) (省略) % gpart show ada3 => 40 16777136 ada3 GPT (8.0G) 40 16777136 1 freebsd-ufs (8.0G) % gpart backup ada3 | gpart restore ada2 gpart: size '16777136': Invalid argumentgpart backup [geom] | gpart restore [geom] は、こう。
% gpart destroy -F ada4 ada4 destroyed % gpart backup ada3 | gpart restore ada4 % gpart show ada3 ada4 => 40 16777136 ada3 GPT (8.0G) 40 16777136 1 freebsd-ufs (8.0G) => 40 16777136 ada4 GPT (8.0G) 40 16777136 1 freebsd-ufs (8.0G)gpart backup | gpart destore はパーティション情報が残ってるとエラーになるので必ず gpart destroy でメタデータを削除してからにしましょう。
% gpart backup ada3 | gpart restore ada4 gpart: geom 'ada4': File exists % gpart destroy ada4 gpart: Device busy % gpart destroy -F ada4 ada4 destroyed % gpart backup ada3 | gpart restore ada4 % gpart show ada3 ada4 => 40 16777136 ada3 GPT (8.0G) 40 16777136 1 freebsd-ufs (8.0G) => 40 16777136 ada4 GPT (8.0G) 40 16777136 1 freebsd-ufs (8.0G)
% 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 /mntRAID-1 メンバーの作成。
% 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 メンバーのサイズは一番小さい物に合わせられていることが確認出来る。
% 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この時点では過去の小さいサイズをひきずったままとなっている。
% 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広がりました。:)
% 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*拡張終わり!!
% 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 とか) で表示する。
% 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 でサイズを大きくするが、対象の選択はインデックス番号を使用する。
% 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 で実際に使えるようにしなければならない。
% 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とか出たら増やせないので諦めましょう。
% 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]「ファイルシステムを拡張する前にバックアップは取れよ!
% 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*
% gmirror status Name Status Components mirror/mirror0 COMPLETE ada1 (ACTIVE) ada2 (ACTIVE)mirror0 からディスクを外す。
% sudo gmirror remove mirror0 ada1 % sudo gmirror status Name Status Components mirror/mirror0 COMPLETE ada2 (ACTIVE) ※ada1 が消えた。 % sudo gmirror dump ada1 Can't read metadata from ada1: Invalid argument. gmirror: Not fully done. ※ada1 に gmirror のメタデータが残っていないことを確認。この状態では ada1 のディスクは ada2 と同期が取れているため、ぶっちゃけバックアップドライブとして保管しておいても良い。
% sudo gmirror insert -v mirror0 ada1 Done. sudo gmirror status Name Status Components mirror/mirror0 DEGRADED ada2 (ACTIVE) ada1 (STALE)追加した ada1 が STALE になっているので、ACTIVE な ada2 からデータを貰うことにする。
% sudo gmirror rebuild -v mirror0 ada1 Done. % gmirror status Name Status Components mirror/mirror0 DEGRADED ada2 (ACTIVE) ada1 (SYNCHRONIZING, 0%)ここで注意する点は、指定するディスクを間違えないこと。
gmirror: Not all disks connected.というエラーが出た場合は、落ち着いて forget を使用しよう。
% sudo gmirror forget -v mirror0 Done. % sudo gmirror status Name Status Components mirror/mirror0 COMPLETE ada2 (ACTIVE)これで新しいディスクを追加できるようになる。
% sudo gmirror label -v mirror0 ada4p1
# sudo gmirror clear ada2とかすればメタデータを消去できるのだが今回はダメ。
# gmirror label -v mirror0 ada1としても「mirror0 は既に使われてるで」とエラーが出て他の名前でしか組めない。
# gmirror dump ada1としてみると、どうも過去に gmirror で組んだ RAID-1 のメタデータが残ったままになっている。
# gmirror load -vでモジュールをロードして
# gmirror label -v mirror0 ada1したら無事に RAID-1 を組む準備が出来た。
# gmirror insert -v mirror0 ada2でディスクを追加したら勝手にリビルドが始まるのでそのまま放置。
# gmirror configure -F -v mirror0で勝手にリビルドするのを止める。
gmirror dump ada1 Metadata on ada1: magic: GEOM::MIRROR version: 4 name: mirror0 mid: 239193923 did: 779873358 all: 2 genid: 0 syncid: 1 priority: 0 slice: 4096 balance: load mediasize: 500107861504 sectorsize: 512 syncoffset: 0 mflags: NOFAILSYNC dflags: NONE hcprovider: provsize: 1000204886016 MD5 hash: 6ebcb89bc3fd056f5feda8878f2707acで確認出来る。
# gmirror configure -n -v mirror0 # gmirror dump ada1 (省略) syncoffset: 0 mflags: NOAUTOSYNC dflags: NONE
gpart → bsdlabel → growfs
% gpart recover ada2 ★おまじない ada2 recovering is not needed % gpart show ada2 => 63 1953525105 ada2 MBR (932G) 63 976768002 1 freebsd [active] (466G) 976768065 976757103 - free - (466G) ★余ってる領域 % sudo gpart resize -i 1 -s 1000GB ada2 gpart: size '2097152000': Invalid argument ★大きかった % sudo gpart resize -i 1 -s 932GB ada2 gpart: size '1954545664': Invalid argument ★大きかった % sudo gpart resize -i 1 -s 930GB ada2 ada2s1 resized ★取れた。 % gpart show ada2 => 63 1953525105 ada2 MBR (932G) 63 1950351360 1 freebsd [active] (930G) 1950351423 3173745 - free - (1.5G) ★ちょっと余った % sudo gpart resize -i 1 -s 931GB ada2 ada2s1 resized % gpart show ada2 => 63 1953525105 ada2 MBR (932G) 63 1952448512 1 freebsd [active] (931G) 1952448575 1076593 - free - (526M) ★惜しい % sudo gpart resize -i 1 -s 932GB ada2 gpart: size '1954545664': Invalid argument ★残りが取れない % sudo gpart resize -i 1 -s 1953525105 ada2 ★ada2のブロック数全部を指定 ada2s1 resized ★取れた! % gpart show ada2 => 63 1953525105 ada2 MBR (932G) 63 1953525105 1 freebsd [active] (932G)教訓。サイズ (-s) はバイトサイズではなくブロックサイズで指定しよう。
% sysctl kern.geom.debugflags kern.geom.debugflags: 0 % sudo sysctl kern.geom.debugflags=16 kern.geom.debugflags: 0 -> 16bsdlabel で広げる。
% sudo bsdlabel -e /dev/ada2s1 # /dev/ada2s1: 8 partitions: # size offset fstype [fsize bsize bps/cpg] c: 1953525105 0 unused 0 0 # "raw" part, don't edit d: 1953525105 0 4.2BSD 0 0 0 ★先頭からきっちり使っているのでサイズは同じ数字にする。今回は gmirror によって先頭 16ブロックを無視して完全にゼロから使いはじめていたので c: と d: の値は同じになった。
% sudo sysctl kern.geom.debugflags=0 kern.geom.debugflags: 16 -> 0最後に growfs。
% sudo growfs /dev/ada2s1d It's strongly recommended to make a backup before growing the file system. OK to grow filesystem on /dev/ada2s1d from 466GB to 932GB? [yes/no] yes super-block backups (for fsck_ffs -b #) at: 977009952, 977386304, 977762656, 978139008, 978515360, 978891712, 979268064, 979644416, 980020768, 980397120, 980773472, (省略)見てみましょう。
% sudo mount /dev/ada2s1d /mnt % df -m Filesystem 1M-blocks Used Avail Capacity Mounted on /dev/ada0s1a 36959 7565 26437 22% / devfs 0 0 0 100% /dev /dev/da1s1d 952 70 806 8% /var/log /dev/mirror/mirror0s1d 461929 346476 78498 82% /pub1 /dev/md0 290 0 266 0% /tmp /dev/ada2s1d 923859 346456 503493 41% /mnt以上。
% uname -a FreeBSD leviathan-vmw 11.2-RELEASE-p3 FreeBSD 11.2-RELEASE-p3 #0: Thu Sep 6 06:42:08 UTC 2018 root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC i386★拡張前
% fdisk ada3 ******* Working on device /dev/ada3 ******* parameters extracted from in-core disklabel are: cylinders=22192 heads=15 sectors/track=63 (945 blks/cyl) Figures below won't work with BIOS for partitions not in cyl 1 parameters to be used for BIOS calculations are: cylinders=22192 heads=15 sectors/track=63 (945 blks/cyl) fdisk: invalid fdisk partition table found Media sector size is 512 Warning: BIOS sector numbering starts with sector 1 Information from DOS bootblock is: The data for partition 1 is: sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD) start 63, size 20971377 (10239 Meg), flag 80 (active) beg: cyl 0/ head 1/ sector 1; end: cyl 687/ head 14/ sector 63 The data for partition 2 is: <UNUSED> The data for partition 3 is: <UNUSED> The data for partition 4 is: <UNUSED>★VMwareで拡張後
% fdisk ada3 ******* Working on device /dev/ada3 ******* parameters extracted from in-core disklabel are: cylinders=44384 heads=15 sectors/track=63 (945 blks/cyl) Figures below won't work with BIOS for partitions not in cyl 1 parameters to be used for BIOS calculations are: cylinders=44384 heads=15 sectors/track=63 (945 blks/cyl) Media sector size is 512 Warning: BIOS sector numbering starts with sector 1 Information from DOS bootblock is: The data for partition 1 is: sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD) start 63, size 20971377 (10239 Meg), flag 80 (active) beg: cyl 0/ head 1/ sector 1; end: cyl 687/ head 14/ sector 63 The data for partition 2 is: <UNUSED> The data for partition 3 is: <UNUSED> The data for partition 4 is: <UNUSED>さて拡張作業。
% sudo fdisk -u ada3 ******* Working on device /dev/ada3 ******* parameters extracted from in-core disklabel are: cylinders=44384 heads=15 sectors/track=63 (945 blks/cyl)この後が超重要。
↑★ここの cylinders と blks/cyl をかけ算する。44384x945=41942880 Figures below won't work with BIOS for partitions not in cyl 1 parameters to be used for BIOS calculations are: cylinders=44384 heads=15 sectors/track=63 (945 blks/cyl) Do you want to change our idea of what BIOS thinks ? [n] ↑★リターン空打ちで[]内の返答となる Media sector size is 512 Warning: BIOS sector numbering starts with sector 1 Information from DOS bootblock is: The data for partition 1 is: sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD) start 63, size 20971377 (10239 Meg), flag 80 (active) beg: cyl 0/ head 1/ sector 1; end: cyl 687/ head 14/ sector 63 Do you want to change it? [n] y ★パーティション1を編集する Supply a decimal value for "sysid (165=FreeBSD)" [165] Supply a decimal value for "start" [63] Supply a decimal value for "size" [20971377] 41942817
↑★計算した数字から start の 63 を引いた数字を入れる Explicitly specify beg/end address ? [n] sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD) start 63, size 41942817 (20479 Meg), flag 80 (active) beg: cyl 0/ head 1/ sector 1; end: cyl 351/ head 14/ sector 63 Are we happy with this entry? [n] y ★適用 The data for partition 2 is: <UNUSED> Do you want to change it? [n] The data for partition 3 is: <UNUSED> Do you want to change it? [n] The data for partition 4 is: <UNUSED> Do you want to change it? [n] Partition 1 is marked active Do you want to change the active partition? [n] We haven't changed the partition table yet. This is your last chance. parameters extracted from in-core disklabel are: cylinders=44384 heads=15 sectors/track=63 (945 blks/cyl) Figures below won't work with BIOS for partitions not in cyl 1 parameters to be used for BIOS calculations are: cylinders=44384 heads=15 sectors/track=63 (945 blks/cyl) Information from DOS bootblock is: 1: sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD) start 63, size 41942817 (20479 Meg), flag 80 (active) beg: cyl 0/ head 1/ sector 1; end: cyl 351/ head 14/ sector 63 2: <UNUSED> 3: <UNUSED> 4: <UNUSED> Should we write new partition table? [n] y ★適用
% sudo bsdlabel -e /dev/ada3s1 # /dev/ada3s1: 8 partitions: # size offset fstype [fsize bsize bps/cpg] c: 20971377 0 unused 0 0 # "raw" part, don't edit d: 20971361 16 4.2BSD 0 0 0 ↓ # /dev/ada3s1: 8 partitions: # size offset fstype [fsize bsize bps/cpg] c: 41942817 0 unused 0 0 # "raw" part, don't edit d: 41942801 16 4.2BSD 0 0 0c: には fdisk の size で入力した数値を指定。
% 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 10GB to 20GB? [yes/no] yes ←★ぶっ壊れる覚悟が出来たら "yes" で広げる。 super-block backups (for fsck_ffs -b #) at: 21802624, 23085120, 24367616, 25650112, 26932608, 28215104, 29497600, 30780096, 32062592, 33345088, 34627584, 35910080, 37192576, 38475072, 39757568, 41040064これで df すると容量が増えてる。
% openssl s_client -connect localhost:443 -showcerts < /dev/null (省略) Verify return code: 21 (unable to verify the first certificate)
SSLCertificateFile "/usr/local/apache2/conf/ssl.crt/cert.pem"と指定して再起動してから openssl を叩いてみたら無事に "Verify return code: 0 (ok)" となった。
SSLCertificateChainFile "/usr/local/apache2/conf/ssl.crt/chain.pem"
SSLCertificateKeyFile "/usr/local/apache2/conf/ssl.key/privkey.pem"
% openssl s_client -connect localhost:443 -showcerts < /dev/null % openssl s_client -connect localhost:25 -starttls smtp -showcerts < /dev/null % openssl s_client -connect localhost:110 -starttls pop3 -showcerts < /dev/null % openssl s_client -connect localhost:143 -starttls imap -showcerts < /dev/null
--pre-hook | 更新作業前に1度だけ実行 |
--deploy-hook | 証明書ごとに実行 |
--post-hook | 更新作業後に1度だけ実行 |
preで一時ファイルをクリアなんて方法がある。
↓
deployでRENEWED_DOMAINSやRENEWED_LINEAGEを追記モード (>>) で一時ファイルにリダイレクト
↓
postで一時ファイルをcatしてメールする
RENEWED_DOMAINS:更新されたドメイン名の一覧 (半角スペース区切り)の環境変数が利用可能なので有効活用しよう。
RENEWED_LINEAGE:新しい証明書と暗号鍵を含む live サブディレクトリ名
echo ${RENEWED_LINEAGE} | awk -F/ '{print $NF}'
% dnssec-keygen -r /dev/urandom -a HMAC-SHA512 -b 256 -n HOST ac_gwnet Kac_gwnet.+165+18145 % cat Kac_gwnet.+165+00000.key ac_gwnet. IN KEY 512 3 165 Dummy+Key+Strings=
% chmod 600 K*
% sudoedit named.conf # ACME Challenge 用 Dynamic DNS 操作鍵 key "ac_gwnet" { algorithm hmac-sha512; secret "Dummy+Key+Strings="; ← 作った鍵の中に書いてあるハッシュ値 }; # ACME Challenge 用 Dynamic DNS ゾーン zone "_acme-challenge.griffonworks.net" { type master; file "/var/named/dynamic/_acme-challenge_griffonworks_net.zone"; allow-update { localhost; key ac_gwnet; }; check-names ignore; allow-transfer { localhost; }; };
% /var/named/dynamic/_acme-challenge_griffonworks_net.zone $ORIGIN _acme-challenge.griffonworks.net. $TTL 60 @ IN SOA sakura.griffonworks.net. root.griffonworks.net. ( 20180920 3H 10M 1W 1M ) IN NS sakura.griffonworks.net.
% /var/named/dynamic/griffonworks_net.zone (省略) _acme-challenge.griffonworks.net. IN NS sakura.griffonworks.net.
% nsupdate -k Kac_gwnet.+165+18145.key >server x.x.x.x ← DNSサーバーのアドレスを指定。localhost なら localhost。 >update add test._acme-challenge.griffonworks.net. 10 IN TXT "TestRecord" >send % digna +noall +ans +ques TXT test._acme-challenge.griffonworks.net. ;test._acme-challenge.griffonworks.net. IN TXT test._acme-challenge.griffonworks.net. 10 IN TXT "TestRecord" ←登録出来た
% nsupdate -k Kac_gwnet.+165+18145.key >server x.x.x.x ← DNSサーバーのアドレスを指定。localhost なら localhost。 >update delete test._acme-challenge.griffonworks.net. >send % digna +noall +ans +ques TXT test._acme-challenge.griffonworks.net. ;test._acme-challenge.griffonworks.net. IN TXT
# Target DNS server : Dynamic DNSの更新リクエストを投げる先のDNSサーバーアドレス dns_rfc2136_server = x.x.x.x # Target DNS port dns_rfc2136_port = 53 # TSIG key name : 鍵で使用したキー名 dns_rfc2136_name = ac_gwnet # TSIG key secret : 鍵の中に書かれているハッシュ値 dns_rfc2136_secret = Dummy+Key+Strings= # TSIG key algorithm : 鍵を作るときに使用したアルゴリズム dns_rfc2136_algorithm = HMAC-SHA512
% sudo certbot certonly -m griffon@griffonworks.net --staging \ -d griffonworks.net \ --manual-public-ip-logging-ok \ --dns-rfc2136 \ --dns-rfc2136-credentials /usr/local/etc/letsencrypt/renewal-hooks/griffonworks.net.ini \ --force-renewal \ --dns-rfc2136-propagation-seconds 10オプションの一部を説明。
% sudo certbot certonly (省略) Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator dns-rfc2136, Installer None Obtaining a new certificate Performing the following challenges: dns-01 challenge for griffonworks.net Waiting 10 seconds for DNS changes to propagate Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /usr/local/etc/letsencrypt/live/griffonworks.net/fullchain.pem Your key file has been saved at: /usr/local/etc/letsencrypt/live/griffonworks.net/privkey.pem Your cert will expire on 2018-12-19. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew"もし Dynamic DNS 更新に失敗したら "PluginError: Received response from server: REFUSED" と言われるので、鍵情報が間違ってないかなどを確認しよう。
20-Sep-2018 13:25:26.982 update-security: client 219.75.232.51#62490: signer "certbot" approved参考:named.log (TXT レコードのクリーンナップ時)
20-Sep-2018 13:25:26.982 update: client 219.75.232.51#62490: updating zone '_acme-challenge.griffonworks.net/IN': adding an RR at '_acme-challenge.griffonworks.net' TXT
20-Sep-2018 13:25:26.984 general: zone_settimer: zone _acme-challenge.griffonworks.net/IN: enter
20-Sep-2018 13:25:26.984 general: zone_settimer: zone _acme-challenge.griffonworks.net/IN: enter
20-Sep-2018 13:25:26.984 general: zone_timer: zone _acme-challenge.griffonworks.net/IN: enter
20-Sep-2018 13:25:26.984 general: zone_maintenance: zone _acme-challenge.griffonworks.net/IN: enter
20-Sep-2018 13:25:26.984 general: zone_settimer: zone _acme-challenge.griffonworks.net/IN: enter
20-Sep-2018 13:25:35.673 update-security: client 219.75.232.51#62492: signer "certbot" approved成功したらあとは certbot renew --cert-name [CN名] で証明書の更新を行う。
20-Sep-2018 13:25:35.673 update: client 219.75.232.51#62492: updating zone '_acme-challenge.griffonworks.net/IN': deleting an RR at _acme-challenge.griffonworks.net TXT
20-Sep-2018 13:25:35.675 general: zone_settimer: zone _acme-challenge.griffonworks.net/IN: enter
20-Sep-2018 13:25:35.675 general: zone_settimer: zone _acme-challenge.griffonworks.net/IN: enter
20-Sep-2018 13:25:35.675 general: zone_timer: zone _acme-challenge.griffonworks.net/IN: enter
20-Sep-2018 13:25:35.675 general: zone_maintenance: zone _acme-challenge.griffonworks.net/IN: enter
20-Sep-2018 13:25:35.675 general: zone_settimer: zone _acme-challenge.griffonworks.net/IN: enter
TLS = STARTTLSということに気がついたのが深夜 3時。
SSL = SMTP over SSL
(setq mew-debug t)を書いてメールを送信する。
<SSL/TLS: > 2018.09.19 03:29:39 LOG3[0]: s_connect: connect 153.126.183.190:465: Connection refused (61) % cat /tmp/griffon22650KWU/mew226506hM client=yes pid= verify=0 foreground=yes debug=debug libwrap=no syslog=no CApath=/home/griffon/Mail/#imap/griffon@mail.griffonworks.net#imap/inbox/ CAfile=/usr/local/share/certs/ca-root-nss.crt [11337] accept=127.0.0.1:11337 connect=mail.griffonworks.net:465"Creating an SSL/TLS connection..." で刺さる。
<SSL/TLS: > 2018.09.19 03:34:14 LOG5[0]: s_connect: connected 153.126.183.190:587"Creating an SSL/TLS connection..." で刺さる。
<SSL/TLS: > 2018.09.19 03:34:14 LOG3[0]: SSL_connect: 140770FC: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
<SSL/TLS: > 2018.09.19 03:34:14 LOG5[0]: Connection reset: 0 byte(s) sent to TLS, 0 byte(s) sent to socket 2018.09.19 03:34:14 LOG7[0]: Deallocating application specific data for session connect address 2018.09.19 03:34:14 LOG7[0]: Remote descriptor (FD=7) closed 2018.09.19 03:34:14 LOG7[0]: Local descriptor (FD=3) closed 2018.09.19 03:34:14 LOG7[0]: Service [11065] finished (0 left) % cat /tmp/griffon22698wWU/mew22698giM client=yes pid= verify=0 foreground=yes debug=debug libwrap=no syslog=no CApath=/home/griffon/Mail/#imap/griffon@mail.griffonworks.net#imap/inbox/ CAfile=/usr/local/share/certs/ca-root-nss.crt [11385] accept=127.0.0.1:11385 connect=mail.griffonworks.net:587
<SSL/TLS: > 2018.09.19 03:37:20 LOG5[0]: s_connect: connected 153.126.183.190:587お、"SMTP LOGIN password (griffon):" でパスワード聞いてきた。
<SSL/TLS: > 2018.09.19 03:37:20 LOG5[0]: Service [11442] connected remote server from 192.168.1.10:62152
2018.09.19 03:37:20 LOG7[0]: Setting remote socket options (FD=7) 2018.09.19 03:37:20 LOG7[0]: Option TCP_NODELAY set on remote socket 2018.09.19 03:37:20 LOG7[0]: Remote descriptor (FD=7) initialized <SSL/TLS: > 2018.09.19 03:37:20 LOG7[0]: <- 220 sakura.griffonworks.net ESMTP Postfix 2018.09.19 03:37:20 LOG7[0]: -> 220 sakura.griffonworks.net ESMTP Postfix % cat /tmp/griffon22755fXU/mew22755PjM client=yes pid= verify=0 foreground=yes debug=debug libwrap=no syslog=no CApath=/home/griffon/Mail/#imap/griffon@mail.griffonworks.net#imap/inbox/ CAfile=/usr/local/share/certs/ca-root-nss.crt [11442] accept=127.0.0.1:11442 connect=mail.griffonworks.net:587
protocol=smtp
例)無い場合は ~/.certs/ にルート証明書を置く。
(setq mew-ssl-cert-directory "/usr/local/share/certs")
% openssl x509 -hash -noout -in ./.certs/cafile.crt 2e5ac55d.0 % mv cafile.crt 2e5ac55d.0.0面倒臭かったら mew-config-alist の中で
; 証明書を検証しないとしてもいいけどフェイクサイトかどうか判断出来ないのであまりよろしくはない。
(ssl-verify-level . 0)
Creating an SSL/TLS connection...と出たきり刺さって帰ってこないので C-g で殺す。
(setq mew-debug t)これで mew を起動し、"i" でメールを取り込む。
<SSL/TLS: >SSLv3 でアクセスしてる…って、stunnel がリンクしてる OpenSSL のライブラリが古いままだったようなのでビルドし直す。
2018.09.17 01:12:07 LOG3[42074:676788736]: SSL_connect: 14094410: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failurer
<SSL/TLS: >うーん、これは流石に原因がわかるまでに時間がかかった。
Reading configuration from file /tmp/griffon59303mzo/mew59303x_X
FIPS_mode_set: F06D065: error:0F06D065:common libcrypto routines:FIPS_mode_set:fips mode not supported
/usr/source/stunnel-4.34% stunnel -version stunnel 4.34 on i386-unknown-freebsd8.0 with OpenSSL 1.0.2p 14 Aug 2018 : : Service-level options cert = /usr/local/etc/stunnel/stunnel.pem ciphers = FIPS
curve = sect163r2
/usr/source/stunnel-5.49% stunnel -version stunnel 5.49 on i386-unknown-freebsd8.0 platform : : Service-level options: ciphers = FIPS (with "fips = yes") ciphers = HIGH:!aNULL:!SSLv2:!DH:!kDHEPSK (with "fips = no")あぁ、chipherが対応してなかったのか〜というわけで問題は Mew。
curve = prime256v1
% sudo certbot-auto certonly --webroot \ -m [自分のメールアドレス] \ -w [ホスト名に対するディレクトリルート] \ -d ホスト名 \ --manual-public-ip-logging-ok例)
% sudo certbot-auto certonly --webroot \ -m [自分のメールアドレス] \ -w /home/www/defaultroot/public_html/ \ -d www.example.com \ -w /home/www/test/public_html/ \ -d test.example.com \ --manual-public-ip-logging-okオプションの順序は関係ないと思うけど、オーセンティケーターに webroot を使うなら -w を先に書いて -d は後ろに書いた方がいいかもしれない。
example.com ≠ *.example.comとなる。
% sudo certbot-auto certonly --manual --staging \ -m [メールアドレス] -d "*.自ドメイン" \ --manual-public-ip-logging-ok --force-renewalでテスト可能。
% sudo certbot-auto certonly --manual --staging \ -m [メールアドレス] -d "*.example.com" \ --manual-public-ip-logging-ok --force-renewal説明。
% sudo certbot-auto renew --cert-name 2nd.example.comCN とは簡単に言うと証明書が持つメインとなるドメイン名で、-d の一番初めに指定したドメイン名が該当する。
% sudo certbot-auto revoke --cert-path [fullchain.pem のフルパス]例)
% sudo certbot-auto revoke \ --cert-path /etc/letsencrypt/live/www.example.com/fullchain.pemrevoke しても再作成 (再申請) は可能。
% sudo certbot-auto certonly --manual --staging \ -m [メールアドレス] -d [ホスト名] \ --manual-public-ip-logging-ok \ --force-renewal --preferred-challenges dns
$ORIGIN griffonworks.net. $TTL 86400 @ IN SOA leviathan.griffonworks.net. root.griffonworks.net. ( : (省略) : ddns IN NS sakura.griffonworks.net.[ /var/named/dynamic/ddns_griffonworks_net.zone ]
$ORIGIN ddns.griffonworks.net. $TTL 60 @ IN SOA leviathan.griffonworks.net. root.griffonworks.net. ( 2018091800 10800 600 604800 60 ) NS ns.griffonworks.net.named.conf は "_" (アンダーバー/アンダースコア) を使用するので "check-names ignore" は必要。
zone "ddns.griffonworks.net" { type master; file "/var/named/dynamic/ddns_griffonworks_net.zone"; allow-update { localhost; }; check-names ignore; };この時、/var/named/dynamic/ddns_griffonworks_net.zone のパーミッションは named が更新する必要があるので named:named に chown しておくこと。
# mkdir /var/named/dynamic/ # chown named:named /var/named/dynamic/ # chmod 770 /var/named/dynamic/ # vi /var/named/dynamic/ddns_griffonworks_net.zone # chown named:named /var/named/dynamic/ddns_griffonworks_net.zone # chmod 644 /var/named/dynamic/ddns_griffonworks_net.zoneテストするなら以下のように。
ホスト名 TTL値 IN TXT 値書式でないと受け付けられません。
% nsupdate -l > update add test.ddns.griffonworks.net. 10 IN TXT "teststrings" > send > (CTRL+D で抜ける) % dig TXT test.ddns.griffonworks.net. ;; ANSWER SECTION: test.ddns.griffonworks.net. 10 IN TXT "teststrings" % nsupdate -l %gt; update delete test.ddns.griffonworks.net. %gt; send > (CTRL+D で抜ける) % dig TXT test.ddns.griffonworks.net. (返信無し)
#!/bin/sh # certbot-auto を実行すると CERTBOT_VALIDATION に認証キーがセットされる。 [ "$CERTBOT_VALIDATION" = "" ] && exit 0 # nsupdate を localhost モード (-l) で動かす。 cat <<_TXT_ | nsupdate -l update delete _acme-challenge.${CERTBOT_DOMAIN}. IN TXT update add _acme-challenge.${CERTBOT_DOMAIN}. 10 IN TXT "${CERTBOT_VALIDATION}" send _TXT_[ /etc/letsencrypt/renewal-hooks/dns-01-clean.sh ]
#!/bin/sh
cat <<_CMD_ | nsupdate -l
update delete _acme-challenge.${CERTBOT_DOMAIN}. IN TXT
send
_CMD_
まずは初回の証明書発行。% sudo certbot-auto certonly \ -m [自分のメールアドレス] \ --preferred-challenges dns \ --staging \ --manual \ --manual-public-ip-logging-ok \ -d "*.ddns.griffonworks.net" \ --manual-auth-hook /etc/letsencrypt/renewal-hooks/dns-01-auth.sh \ --manual-cleanup-hook /etc/letsencrypt/renewal-hooks/dns-01-clean.sh説明。
% sudo certbot-auto 〜 Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator manual, Installer None Obtaining a new certificate Performing the following challenges: dns-01 challenge for ddns.griffonworks.netもしスクリプトにエラーがあったらちゃんとエラーが出る。
Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/ddns.griffonworks.net/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/ddns.griffonworks.net/privkey.pem Your cert will expire on 2018-12-17. To obtain a new or tweaked version of this certificate in the future, simply run certbot-auto again. To non-interactively renew *all* of your certificates, run "certbot-auto renew"
% sudo certbot-auto renew --cert-name ddns.griffonworks.net --staging試しに強制的に証明書を更新 (--force-renewal) してみる。
% certbot-auto renew --cert-name ddns.griffonworks.net --force-renewal Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/ddns.griffonworks.net.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Plugins selected: Authenticator manual, Installer None Renewing an existing certificate Performing the following challenges: dns-01 challenge for ddns.griffonworks.net Waiting for verification... Cleaning up challenges - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - new certificate deployed without reload, fullchain is /etc/letsencrypt/live/ddns.griffonworks.net/fullchain.pem - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations, all renewals succeeded. The following certs have been renewed: /etc/letsencrypt/live/ddns.griffonworks.net/fullchain.pem (success) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % openssl x509 -text -in ./live/ddns.griffonworks.net/cert.pem | more Signature Algorithm: sha256WithRSAEncryption Issuer: CN=Fake LE Intermediate X1 Validity Not Before: Sep 18 04:26:13 2018 GMTNot Before: が現在の時間になっていることが確認出来る (夏時間に注意)。
Not After : Dec 17 04:26:13 2018 GMT
% sudo certbot-auto revoke --staging \ --cert-path /etc/letsencrypt/live/ddns.griffonworks.net/fullchain.pemこのフック機能、"certbot User Guide - Pre and Post Validation Hooks" を見ると http にも対応しているので、scp とノーパスの鍵を組み合わせれば certbot-auto 実行サーバーと Web サーバーを分離出来たりするが、それはまた別のお話。
% sudo certbot-auto certonly \ -m griffon@griffonworks.net \ --staging --manual --manual-public-ip-logging-ok \ -d "*.griffonworks.net" -d griffonworks.net \ --preferred-challenges dns \ --manual-auth-hook /etc/letsencrypt/renewal-hooks/dns-01-auth.sh \ --manual-cleanup-hook /etc/letsencrypt/renewal-hooks/dns-01-clean.sh
└ G兄
└ G兄
└ G兄
└ G兄
└ G兄
└ G兄
└ G兄
└ G兄
└ 山銀
└ G兄