CentOS 7(XFS)のパーティションを縮小する手順

XFSは論理ボリュームの縮小に対応していません。
パーティションの縮小をするには削除→作成の手順が必要になります。
ちょっと検索しても手順がみつからなかったのでまとめておきます。

# 環境

VirtualBoxにCentOS 7を最小構成でインストール
lvmでhomeにroot以外の全ての領域を割当てた後、パーティションの縮小をする手順

オンライン・リモートでの作業を想定している。
対象のボリュームをアンマウントできない場合、シングルユーザーモードにする必要がある為、この手順は使えない。
(停止できないプロセスがあるボリュームなど)

```
$ uname -s -r -v -m -o
Linux 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64 GNU/Linux
$ cat /etc/redhat-release 
CentOS Linux release 7.1.1503 (Core) 
$ df -h
ファイルシス            サイズ  使用  残り 使用% マウント位置
/dev/mapper/centos-root   2.0G  924M  1.1G   46% /
devtmpfs                  236M     0  236M    0% /dev
tmpfs                     245M     0  245M    0% /dev/shm
tmpfs                     245M  4.3M  241M    2% /run
tmpfs                     245M     0  245M    0% /sys/fs/cgroup
/dev/mapper/centos-home   4.7G   33M  4.7G    1% /home
/dev/sda1                 497M  119M  379M   24% /boot
```

## 参考

* [LVM のサイズをオンラインのまま変更する。](http://d.hatena.ne.jp/Naruhodius/20120116/1326658909)
* [LVMの使い方](http://d.hatena.ne.jp/kt_hiro/20120117/1326764520)
* [xfsdump,xfsrestoreでXFSのディスクコピー](http://blog.livedoor.jp/hakin/archives/51578266.html)
* [Linux パーティションのサイズを変更する: 第 2 回 高度なサイズ変更](http://www.ibm.com/developerworks/jp/linux/library/l-resizing-partitions-2/)

## リサイズ手順

/home をリサイズする為にリサイズ用ユーザーを/home以外にホームディレクトリを持つユーザーを作りリサイズ作業を行う

## 手順概要

1. /home以外にホームを持つwheelに所属するユーザーを作る
2. 作業ユーザーでssh
3. /home をアンマウント
4. /homeを縮小
5. 空領域を新規パーティションにする

## 手順詳細

作業用ホームを作り作業ユーザーを作る
ユーザー作成後、sshの鍵を設置する
selinuxが有効な場合、ラベルの設定もおこなう

```
$ cd /
$ sudo mkdir work
$ sudo useradd -d /work/resize -m -G wheel -p resize resize
$ sudo passwd resize
$ cd /work
$ sudo -u resize mkdir resize/.ssh
$ sudo -u resize vi resize/.ssh/authorized_keys
$ sudo -u resize chmod 700 resize/.ssh
$ sudo -u resize chmod 600 resize/.ssh/authorized_keys
$ sudo chcon -t ssh_home_t resize/.ssh
$ sudo chcon -t ssh_home_t resize/.ssh/authorized_keys
$ exit
```

リサイズ用ユーザー(resize)でログイン

```
local$ ssh -l resize srv1
```

xfsdump のインストール

```
$ sudo yum install xfsdump
```

ダンプ作成

```
$ cd /work
$ sudo xfsdump -J -L home -M drive -f home.dump /home
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.4 (dump format 3.0) - type ^C for status and control
xfsdump: level 0 dump of srv1.localdomain:/home
xfsdump: dump date: Fri Apr 10 21:29:26 2015
xfsdump: session id: 397ff781-1fe4-4799-b5d4-6c4948bb807a
xfsdump: session label: "home"
xfsdump: ino map phase 1: constructing initial dump list
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 47936 bytes
xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 32928 bytes
xfsdump: dump size (non-dir files) : 6336 bytes
xfsdump: dump complete: 0 seconds elapsed
xfsdump: Dump Summary:
xfsdump:   stream 0 /work/home.dump OK (success)
xfsdump: Dump Status: SUCCESS
```

/home アンマウント

```
$ sudo umount /dev/mapper/centos-home
```

論理ボリュームの情報取得
VG name が必要になる

```
$ sudo lvdisplay
```

利用停止 → 削除

```
$ sudo lvscan
$ sudo lvchange -an /dev/centos/home
$ sudo lvremove /dev/centos/home
```

新/home 作成

```
$ sudo lvcreate -L 1.7G -n home centos
$ sudo mkfs.xfs /dev/centos/home
$ sudo mount /dev/centos/home
$ sudo xfsrestore -J -L home -f home.dump /home
```

残パーティション作成

```
$ sudo lvcreate -l 100%FREE -n drbd centos
$ sudo mkfs.xfs /dev/centos/drbd
$ sudo mkdir /drbd
$ sudo vi /etc/fstab
# drbdのマウント情報を追加する
/dev/mapper/centos-drbd /drbd                   xfs     defaults        0 0
$ sudo mount /dev/centos/drbd
```