2020/08/02

mdadmによるRAID1の縮小

2本のディスクでLinuxを走らせているが、キャッシュ的なファイルを保存しているパーティション(mdadmを使ったRAID0で構築)を広げたくなった。
RAID1で構築しているパーティションが余っていたので、その領域を縮小させる。

現状。
root@edo /
# df
Filesystem                          1K-blocks     Used Available Use% Mounted on
udev                                    10240        0     10240   0% /dev
/dev/md3                             32895784 29665708   1536028  96% /
tmpfs                                  783424     2640    780784   1% /run
cgroup_root                             10240        0     10240   0% /sys/fs/cgroup
shm                                   3917112        0   3917112   0% /dev/shm
/dev/md4                            408069104 76185332 310797564  20% /data
/dev/mapper/VG_DATA2_20150825-data2  41153856 24537848  14544420  63% /data2

root@edo /
# df -h
Filesystem                           Size  Used Avail Use% Mounted on
udev                                  10M     0   10M   0% /dev
/dev/md3                              32G   27G  2.9G  91% /
tmpfs                                766M  2.6M  763M   1% /run
cgroup_root                           10M     0   10M   0% /sys/fs/cgroup
shm                                  3.8G     0  3.8G   0% /dev/shm
/dev/md4                             390G   73G  298G  20% /data
/dev/mapper/VG_DATA2_20150825-data2   40G   24G   14G  63% /data2


root@edo /
# mdadm --detail --scan
ARRAY /dev/md1 metadata=0.90 UUID=b5524b46:d7163145:cb201669:f728008a
ARRAY /dev/md4 metadata=1.2 name=edo:/data UUID=8f55590b:38f15e8a:4ea20fad:c34229d8
ARRAY /dev/md3 metadata=1.2 name=edo:/ UUID=1a4518b9:879d5121:f1651760:8b1a1f02
ARRAY /dev/md/edo:5 metadata=1.2 name=edo:5 UUID=4ed5c360:ccebb0be:93433852:f0358022

root@edo /
# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [raid0] [raid1] [raid10] [linear] [multipath]
md127 : active raid0 sdb5[1] sda5[0]
      52942848 blocks super 1.2 512k chunks

md3 : active raid1 sda3[2] sdb3[3]
      33553336 blocks super 1.2 [2/2] [UU]

md4 : active raid1 sda4[2] sdb4[1]
      421396480 blocks super 1.2 [2/2] [UU]
      bitmap: 2/4 pages [8KB], 65536KB chunk

md1 : active raid1 sda1[0] sdb1[1]
      524224 blocks [2/2] [UU]

unused devices: <none>


root@edo /
# cat /etc/fstab
# /etc/fstab: static file system information.
#
# noatime turns off atimes for increased performance (atimes normally aren't
# needed); notail increases performance of ReiserFS (at the expense of storage
# efficiency).  It's safe to drop the noatime options if you want and to
# switch between notail / tail freely.
#
# The root filesystem should have a pass number of either 0 or 1.
# All other filesystems should have a pass number of 0 or greater than 1.
#
# See the manpage fstab(5) for more information.
#

# <fs>                  <mountpoint>    <type>          <opts>          <dump/pass>

# NOTE: If your BOOT partition is ReiserFS, add the notail option to opts.
/dev/md1                /boot           ext4            noauto,noatime  1 2
/dev/md3                /               ext4            noatime         1 1
/dev/sda6               none            swap            sw,pri=1        0 0
/dev/sdb6               none            swap            sw,pri=1        0 0
/dev/md4                /data           ext4            noatime         1 2
#/dev/cdrom             /mnt/cdrom      auto            noauto,ro       0 0
#/dev/fd0               /mnt/floppy     auto            noauto          0 0
#/dev/VG_DATA2_20121129/data2   /data2  ext4            noatime         1 0
/dev/VG_DATA2_20150825/data2    /data2  ext4            noatime         1 0


#/proc                  /chroot/dhcp/proc               none            bind            0 0

root@edo /
# fdisk -l /dev/sda Disk /dev/sda: 465.78 GiB, 500107862016 bytes, 976773168 sectors Disk model: Samsung SSD 850 Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: 431735A7-BD0D-410F-A96C-C292628A24CA Device Start End Sectors Size Type /dev/sda1 2048 1050623 1048576 512M Linux RAID /dev/sda2 1050624 1116159 65536 32M BIOS boot /dev/sda3 13633536 80742399 67108864 32G Linux RAID /dev/sda4 80742400 923797503 843055104 402G Linux RAID /dev/sda5 923797504 976773134 52975631 25.3G Linux RAID /dev/sda6 1116160 13633535 12517376 6G Linux swap Partition table entries are not in disk order. root@edo /
# fdisk -l /dev/sdb Disk /dev/sdb: 465.78 GiB, 500107862016 bytes, 976773168 sectors Disk model: Crucial_CT500MX2 Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: gpt Disk identifier: 0D638A13-AA1D-4131-8BB7-6DE88A59EDBA Device Start End Sectors Size Type /dev/sdb1 2048 1050623 1048576 512M Linux RAID /dev/sdb2 1050624 1116159 65536 32M BIOS boot /dev/sdb3 13633536 80742399 67108864 32G Linux RAID /dev/sdb4 80742400 923797503 843055104 402G Linux RAID /dev/sdb5 923797504 976773134 52975631 25.3G Linux RAID /dev/sdb6 1116160 13633535 12517376 6G Linux swap Partition table entries are not in disk order. root@edo / # mount proc on /proc type proc (rw,nosuid,nodev,noexec,relatime) udev on /dev type devtmpfs (rw,nosuid,relatime,size=10240k,nr_inodes=976840,mode=755) devpts on /dev/pts type devpts (rw,relatime,gid=5,mode=620,ptmxmode=000) sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime) /dev/md3 on / type ext4 (rw,noatime) tmpfs on /run type tmpfs (rw,nodev,relatime,size=783424k,mode=755) securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime) debugfs on /sys/kernel/debug type debugfs (rw,nosuid,nodev,noexec,relatime) configfs on /sys/kernel/config type configfs (rw,nosuid,nodev,noexec,relatime) fusectl on /sys/fs/fuse/connections type fusectl (rw,nosuid,nodev,noexec,relatime) pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime) cgroup_root on /sys/fs/cgroup type tmpfs (rw,nosuid,nodev,noexec,relatime,size=10240k,mode=755) openrc on /sys/fs/cgroup/openrc type cgroup (rw,nosuid,nodev,noexec,relatime,release_agent=/lib/rc/sh/cgroup-release-agent.sh,name=openrc) none on /sys/fs/cgroup/unified type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate) cpuset on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset) cpu on /sys/fs/cgroup/cpu type cgroup (rw,nosuid,nodev,noexec,relatime,cpu) cpuacct on /sys/fs/cgroup/cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct) blkio on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio) memory on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory) devices on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices) freezer on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer) net_cls on /sys/fs/cgroup/net_cls type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls) perf_event on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event) net_prio on /sys/fs/cgroup/net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_prio) hugetlb on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb) pids on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids) mqueue on /dev/mqueue type mqueue (rw,nosuid,nodev,noexec,relatime) shm on /dev/shm type tmpfs (rw,nosuid,nodev,noexec,relatime) binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,nosuid,nodev,noexec,relatime) /dev/mapper/VG_DATA2_20150825-data2 on /data2 type ext4 (rw,noatime,stripe=256)

md4を150GBほどに縮小したい。
一旦、少し小さめに140GBにサイズを変える試み。
しかし、マウントしたままでは縮小できないと怒られる。
root@edo /
# resize2fs /dev/md4 140G
resize2fs 1.45.5 (07-Jan-2020)
Filesystem at /dev/md4 is mounted on /data; on-line resizing required
resize2fs: On-line shrinking not supported

そこで、マウントしているであろうプロセスを順次止める。
rc-updateで起動させているサービスの一覧を見て、一つずつ止める。
root@edo /
# rc-update
              amavisd |      default
              apache2 |      default
              apcupsd |      default
    apcupsd.powerfail |                        shutdown
               binfmt | boot
             bootmisc | boot
       bridge_forward |      default
              cgroups |                                 sysinit
                clamd |      default
               cronie |      default
                  dcc |      default
                devfs |                                 sysinit
                dmesg |                                 sysinit
              dovecot |      default
                 fsck | boot
             hostname | boot
              hwclock | boot
             iptables |      default
              keymaps | boot
            killprocs |                        shutdown
    kmod-static-nodes |                                 sysinit
           lm_sensors |      default
                local |      default nonetwork
           localmount | boot
             loopback | boot
                  lvm | boot
               mcelog |      default
                mdadm |      default
               mdraid | boot
              modules | boot
             mount-ro |                        shutdown
                 mtab | boot
                mysql |      default
                named |      default
              net.br0 |      default
               net.lo | boot
             net.tap0 |      default
             net.tap1 |      default
             netmount |      default
                 ntpd |      default
     opentmpfiles-dev |                                 sysinit
   opentmpfiles-setup | boot
              postfix |      default
               procfs | boot
                redis |      default
                 root | boot
                samba |      default
         save-keymaps | boot
    save-termencoding | boot
            savecache |                        shutdown
               smartd |      default
                snmpd |      default
 spigot-server.fktn-spigot |      default
                 sshd |      default
                 swap | boot
               sysctl | boot
                sysfs |                                 sysinit
            syslog-ng |      default
         termencoding | boot
                 udev |                                 sysinit
         udev-trigger |                                 sysinit
              urandom | boot

root@edo /
# /etc/init.d/apache2 stop
 * Stopping apache2 ...                                                                                                                                                                                                                                                                              [ ok ]

root@edo /
# /etc/init.d/postfix stop
 * Stopping postfix  ...                                                                                                                                                                                                                                                                             [ ok ]

root@edo /
# /etc/init.d/amavisd stop
 * Stopping amavisd ...                                                                                                                                                                                                                                                                              [ ok ]

root@edo /
# /etc/init.d/clamd stop
 * Stopping clamd ...                                                                                                                                                                                                                                                                                [ ok ]
 * Stopping freshclam ...                                                                                                                                                                                                                                                                            [ ok ]

root@edo /
# /etc/init.d/dcc stop
 * Stopping dccif ...                                                                                                                                                                                                                                                                                [ ok ]

root@edo /
# /etc/init.d/dovecot stop
 * Stopping dovecot ...                                                                                                                                                                                                                                                                              [ ok ]

root@edo /
# /etc/init.d/mysql stop
 * Stopping mysql ...                                                                                                                                                                                                                                                                                [ ok ]

root@edo /
# /etc/init.d/named stop
 * Stopping named ...                                                                                                                                                                                                                                                                                [ ok ]

root@edo /
# /etc/init.d/ntpd stop
 * Stopping ntpd ...                                                                                                                                                                                                                                                                                 [ ok ]

root@edo /
# /etc/init.d/samba stop
 * samba -> stop: smbd ...                                                                                                                                                                                                                                                                           [ ok ]
 * samba -> stop: nmbd ...                                                                                                                                                                                                                                                                           [ ok ]

root@edo /
# /etc/init.d/smartd stop
 * Stopping smartd ...                                                                                                                                                                                                                                                                               [ ok ]

root@edo /
# /etc/init.d/snmp
snmpd      snmptrapd

root@edo /
# /etc/init.d/snmpd stop
 * Stopping snmpd ...                                                                                                                                                                                                                                                                                [ ok ]

root@edo /
# /etc/init.d/spigot-server.fktn-spigot stop
 * Stopping Minecraft Spigot Server (World: fktn-spigot) ...                                                                                                                                                                                                                                         [ ok ]

加えて、lsofコマンドを使って何がファイルを開いているか確認。
root@edo /
# lsof | grep "/data/"
bash       7504                 user  cwd       DIR                9,4       4096    8524900 /data/home/user
su         7507                  root  cwd       DIR                9,4       4096    8524900 /data/home/user


ホームディレクトリがここにあったので、rootでの直接ログインに切り替える。
ファイルがすべて閉じられたので、アンマウントする。
root@edo /
# lsof | grep "/data/"

root@edo /
# umount /data

root@edo /
# df -h
Filesystem                           Size  Used Avail Use% Mounted on
udev                                  10M     0   10M   0% /dev
/dev/md3                              32G   27G  3.2G  90% /
tmpfs                                766M  2.3M  763M   1% /run
cgroup_root                           10M     0   10M   0% /sys/fs/cgroup
shm                                  3.8G     0  3.8G   0% /dev/shm
/dev/mapper/VG_DATA2_20150825-data2   40G   24G   14G  63% /data2

アンマウントしたので、再度リサイズを試みる。ディスクチェックを先にやるように言われたので、e2fsckを行う。
途中、修正の提案があったので受け入れておく(Yesにする)
root@edo /
# e2fsck -f /dev/md4
e2fsck 1.45.5 (07-Jan-2020)
Pass 1: Checking inodes, blocks, and sizes
Inode 917507 extent tree (at level 2) could be narrower.  Optimize<y>? yes
Pass 1E: Optimizing extent trees
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information

/dev/md4: ***** FILE SYSTEM WAS MODIFIED *****
/dev/md4: 1308396/9830400 files (0.6% non-contiguous), 20141759/39321600 blocks

ディスクのチェックが終わったので、再度リサイズを試みる。
成功したので、再度ディスクのチェックをしてみる。
修正が入ったが、こちらも実施して完了。
root@edo /
# resize2fs /dev/md4 130G
resize2fs 1.45.5 (07-Jan-2020)
Resizing the filesystem on /dev/md4 to 34078720 (4k) blocks.
The filesystem on /dev/md4 is now 34078720 (4k) blocks long.


root@edo /
# e2fsck -f /dev/md4
e2fsck 1.45.5 (07-Jan-2020)
Pass 1: Checking inodes, blocks, and sizes
Inode 917507 extent tree (at level 2) could be narrower.  Optimize<y>? yes
Inode 5638675 extent tree (at level 2) could be narrower.  Optimize<y>? yes
Pass 1E: Optimizing extent trees
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information

/dev/md4: ***** FILE SYSTEM WAS MODIFIED *****
/dev/md4: 1308396/8519680 files (0.6% non-contiguous), 19977648/34078720 blocks

root@edo /
# e2fsck -f /dev/md4
e2fsck 1.45.5 (07-Jan-2020)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/md4: 1308396/8519680 files (0.6% non-contiguous), 19977648/34078720 blocks

この段階で、一旦マウントしてdfを見ると130GBになっていることがわかるはずだが、何かのプロセスが/dataにアクセスするとめんどくさいので確認はしない。
この130GBというのは、ファイルシステムとしては130GBになっているというだけで、MDとしてはもともとの400GBを握っているので、この容量を変更する。
まずは、現状。Array Sizeが400GBになっているのがわかる。
root@edo /
# mdadm -D /dev/md4
/dev/md4:
           Version : 1.2
     Creation Time : Sat Aug  1 16:49:39 2015
        Raid Level : raid1
        Array Size : 421396480 (401.88 GiB 431.51 GB)
     Used Dev Size : 421396480 (401.88 GiB 431.51 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Sun Aug  2 11:58:56 2020
             State : clean
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : bitmap

              Name : edo:/data  (local to host edo)
              UUID : 8f55590b:38f15e8a:4ea20fad:c34229d8
            Events : 7298

    Number   Major   Minor   RaidDevice State
       2       8        4        0      active sync   /dev/sda4
       1       8       20        1      active sync   /dev/sdb4



mdadm --growで、-zオプションを使ってサイズを変更する。
ファイルシステムが130GBなので、それよりも小さい120GBにする。
root@edo /
# mdadm --grow /dev/md4 -z 120G
mdadm: component size of /dev/md4 has been set to 125829120K


変化を確認すると、120GBになっていることがわかる。
root@edo /
# mdadm -D /dev/md4
/dev/md4:
           Version : 1.2
     Creation Time : Sat Aug  1 16:49:39 2015
        Raid Level : raid1
        Array Size : 125829120 (120.00 GiB 128.85 GB)
     Used Dev Size : 125829120 (120.00 GiB 128.85 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Sun Aug  2 11:59:32 2020
             State : clean
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : bitmap

              Name : edo:/data  (local to host edo)
              UUID : 8f55590b:38f15e8a:4ea20fad:c34229d8
            Events : 7299

    Number   Major   Minor   RaidDevice State
       2       8        4        0      active sync   /dev/sda4
       1       8       20        1      active sync   /dev/sdb4


ここまでで、md4はファイルシステムとしては130GB、RAIDとしては120GBになっている。
しかし、ディスク上のパーティションとしてはまだ400GBのままなので、次はパーティションを縮小する。
ここからはRAIDをいじるので、2本のディスクが正常に同期されていることを確認する。
同期中である旨の表示がないので、同期済みであることがわかる。
root@edo /
# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [raid0] [raid1] [raid10] [linear] [multipath]
md127 : active raid0 sdb5[1] sda5[0]
      52942848 blocks super 1.2 512k chunks

md3 : active raid1 sda3[2] sdb3[3]
      33553336 blocks super 1.2 [2/2] [UU]

md4 : active raid1 sda4[2] sdb4[1]
      125829120 blocks super 1.2 [2/2] [UU]
      bitmap: 0/1 pages [0KB], 65536KB chunk

md1 : active raid1 sda1[0] sdb1[1]
      524224 blocks [2/2] [UU]

unused devices: <none>


まずは、sdb4を障害ありとしてマーク。
root@edo /
# mdadm /dev/md4 --fail /dev/sdb4
mdadm: set /dev/sdb4 faulty in /dev/md4

root@edo /
# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [raid0] [raid1] [raid10] [linear] [multipath]
md127 : active raid0 sdb5[1] sda5[0]
      52942848 blocks super 1.2 512k chunks

md3 : active raid1 sda3[2] sdb3[3]
      33553336 blocks super 1.2 [2/2] [UU]

md4 : active raid1 sda4[2] sdb4[1](F)
      125829120 blocks super 1.2 [2/1] [U_]
      bitmap: 0/1 pages [0KB], 65536KB chunk

md1 : active raid1 sda1[0] sdb1[1]
      524224 blocks [2/2] [UU]

unused devices: <none>


続いて、sdb4をRAIDから切り離す。
root@edo /
# mdadm /dev/md4 --remove /dev/sdb4
mdadm: hot removed /dev/sdb4 from /dev/md4

root@edo /
# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [raid0] [raid1] [raid10] [linear] [multipath]
md127 : active raid0 sdb5[1] sda5[0]
      52942848 blocks super 1.2 512k chunks

md3 : active raid1 sda3[2] sdb3[3]
      33553336 blocks super 1.2 [2/2] [UU]

md4 : active raid1 sda4[2]
      125829120 blocks super 1.2 [2/1] [U_]
      bitmap: 0/1 pages [0KB], 65536KB chunk

md1 : active raid1 sda1[0] sdb1[1]
      524224 blocks [2/2] [UU]

unused devices: <none>


md4のところからsdb4が消えており、RAIDから切り離されたことがわかる。


次は、fdiskで/dev/sdb4のサイズを変更するのだが、拡張したいパーティションがあるので、別記事として拡張の話を記載する。

0 件のコメント: