【Linux】DISK構成コマンド

パーティション切ってさくっとFS作成・削除したい時用。

# 構成手順
## ・ディスク/パーティション確認
```console:
[root@host01 ~]# fdisk -l
Disk /dev/vda: 30 GiB, 32212254720 bytes, 62914560 sectors
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: D209C89E-EA5E-4FBD-B161-B461CCE297E0

Device       Start      End  Sectors  Size Type
/dev/vda1     2048     4095     2048    1M BIOS boot
/dev/vda2     4096   413695   409600  200M EFI System
/dev/vda3   413696  1642495  1228800  600M Linux extended boot
/dev/vda4  1642496 62914526 61272031 29.2G Linux filesystem


Disk /dev/vdb: 250 GiB, 268435456000 bytes, 524288000 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
```
1stDISK(/dev/sda)にOSがインストールされており、2ndDISKが/dev/vdbとして認識されている。
デバイス(パーティション)名は順に番号がつく。2つ目のディスクからは認識された記憶媒体順に末尾b,cと続く。
※ディスクデバイスでそのままFSを作成することもできる。
```
mkfs.xfs /dev/vdb
or
mkfs.ext4 /dev/vdb
```


## ・パーティション作成
```console:
[root@host01 ~]# fdisk /dev/vdb

Welcome to fdisk (util-linux 2.37.4).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

This disk is currently in use - repartitioning is probably a bad idea.
It's recommended to umount all file systems, and swapoff all swap
partitions on this disk.

The device contains 'xfs' signature and it will be removed by a write command. See fdisk(8) man page and --wipe option for more details.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x7ce67ba4.

Command (m for help): 
```
nで新しいパーティションを切り出す
tでタイプ変更
dでパーティション削除
pで現在のパーティションを表示
wで反映

ディスク名に1から番号が付くパーティションが作成される
例：/dev/vdb1,/dev/vdb2,/dev/vdb3,,

## (ついでに)LVMの場合
### ・PV作成・確認
```
pvcreate /dev/xxxx1
pvdisplay
```
できない場合はlvm2インストール
<br>
### ・VG作成・確認
```
vgcreate vg_xxxx /dev/xxxx1
vgdisplay
```

※補足

```
vgcreate vg_xxxx /dev/xvdc1 /dev/xvde1 /dev/xvdf1
```
とすることで複数PVから一つのVGを作成できる。
<br>
### ・LV作成・確認
```
lvcreate -n lv_xxxx -l 100%FREE vg_xxxx
or
lvcreate -n lv_xxxx -L 10G vg_xxxx

lvdisplay
```
パーティションのサイズすべて割り当てるか指定するかです。
<br>
## ・FS作成・確認
```
mkfs.xfs /dev/vdb1
or
mkfs.ext4 /dev/vg_xxxx/lv_xxx
```
FSタイプはだいたいxfsまたはext4
disk or Partition or LVMボリュームを指定する

## ・マウント
```
mount /dev/vdb1 /mnt

※(LVMの場合)
mount /dev/mapper/vg_xxxx-lv_xxxx /mountpoint
```

## ・設定後確認
```
[root@host01 ~]# lsblk -f
NAME   FSTYPE FSVER LABEL      UUID              FSAVAIL FSUSE% MOUNTPOINTS
vda                                                                                
├─vda1                                                                             
├─vda2 vfat         FAT16      7B77-95E7          192.8M     4% /boot/efi
├─vda3 xfs          boot       5af62dc6-8d15-...  278.6M    48% /boot
└─vda4 xfs          root       aec1c1e8-3576-...    8.5G    71% /
vdb                                                                                
├─vdb1 xfs          ephemeral0 bf829dfa-cbdb-...  245.1G   2% /mnt
```
FSが作成されてない場合,MountPointが空で表示される

## ・マウント確認
```console:
[root@host01 ~]# df -H
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        4.2M     0  4.2M   0% /dev
tmpfs           8.3G  173k  8.3G   1% /dev/shm
tmpfs           3.3G   96M  3.3G   3% /run
/dev/vda4        32G   23G  9.2G  71% /
/dev/vda3       563M  270M  293M  49% /boot
/dev/vda2       210M  7.4M  203M   4% /boot/efi
/dev/vdb1       269G  5.2G  264G   2% /mnt
tmpfs           1.7G     0  1.7G   0% /run/user/1000
[root@poc-ocpfstp01 ~]# 

```
## ・自動起動設定
```console:
[root@host01 ~]# vi /etc/fstab

UUID=aec1c1e8-3576-...	/	xfs	defaults	0	0
UUID=5af62dc6-8d15-...	/boot	xfs	defaults	0	0
UUID=7B77-95E7	/boot/efi	vfat	defaults,uid=0,gid=0,umask=077,shortname=winnt	0	2
/dev/vdb1	/mnt	auto	defaults,nofail,x-systemd.requires=cloud-init.service,_netdev,comment=cloudconfig	0	2
```
デバイス名でもUUIDを指定しても良い
UUIDは`blkid`コマンドで確認できる

## ・FSチェック
```
e2fsck -f /dev/vdb1
```

## ・パーティションのリサイズ
既存のパーティションの容量を変更できる
※必ずバックアップを取っておくこと。またOSのパーティションを変にいじると起動しなくなる可能性有り
```console:
[root@host01 ~]# parted /dev/vdb
GNU Parted 3.5
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted)
(parted) resizepart 1 100G
Warning: Partition /dev/vdb1 is being used. Are you sure you want to continue?
Yes/No? Yes
Warning: Shrinking a partition can cause data loss, are you sure you want to continue?
Yes/No? Yes
(parted)
(parted) quit
Information: You may need to update /etc/fstab.
```


# 元に戻す手順 

### ・全体確認
```
lsblk
blkid
```
### ・自動起動削除
```
vi /etc/fstab
```
エントリを消す

### ・アンマウント/確認
```
umount  /mountpoint
df -h
```
### ・FS削除
```
wipefs -a /dev/vdb1
```
### ・LV削除(FSも削除される)
```
lvremove /dev/vg_xxxx/lv_xxxx
```
### ・VG削除
```
vgremove vg_backup
```
※
割り当てているPVが2つ以上の場合は削除できない。
複数のPVから構成している場合は
```
vgreduce vg_xxxx /dev/xvde1 /dev/xvdf1
```
でPVを外してから削除。
### ・PV削除
```
pvremove /dev/xxxx1
複数指定可
pvremove /dev/xxxx1 /dev/xxxx2 /dev/xxxx3
```
### ・パーティション削除
```
fdisk /dev/xxxxx
```
dでパーティション削除
pで現在のパーティションを表示
wで反映

### ・確認
```
df -h
lsblk
blkid
pvdisplay
vgdisplay
lvdisplay
fdisk -l
```


# OMAKE

## ・/homeのLVM削除
RHEL9のデフォルトインストールでは、root領域以外のディスクがすべてLVMで/homeに割りあたってしまう。
これを解除してすべて/の領域としたい時の手順

以下、デフォルトの状態
```console:
[root@host01 ~]# df -H
ファイルシス          サイズ  使用  残り 使用% マウント位置
devtmpfs                4.2M     0  4.2M    0% /dev
tmpfs                   270G     0  270G    0% /dev/shm
tmpfs                   108G   76M  108G    1% /run
efivarfs                312k  215k   92k   71% /sys/firmware/efi/efivars
/dev/mapper/rhel-root    76G  5.9G   70G    8% /
/dev/mapper/rhel-home   3.8T   27G  3.8T    1% /home
/dev/sda2               1.1G  521M  487M   52% /boot
/dev/sda1               620M  7.4M  612M    2% /boot/efi
tmpfs                    54G   62k   54G    1% /run/user/42
tmpfs                    54G   37k   54G    1% /run/user/1000
[root@host01 ~]# 
[root@host01 ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda             8:0    0  3.5T  0 disk 
├─sda1          8:1    0  592M  0 part /boot/efi
├─sda2          8:2    0    1G  0 part /boot
└─sda3          8:3    0  3.5T  0 part 
  ├─rhel-root 253:0    0   70G  0 lvm  /
  ├─rhel-swap 253:1    0    4G  0 lvm  [SWAP]
  └─rhel-home 253:2    0  3.4T  0 lvm  /home
[root@host01 ~]# 
[root@host01 ~]# blkid
/dev/mapper/rhel-swap: UUID="dacc8c23-41c8-49f9-b8c4-bf53cdb7ee7d" TYPE="swap"
/dev/mapper/rhel-home: UUID="555764f7-874e-4eee-8dcf-5a666d195e4f" TYPE="xfs"
/dev/mapper/rhel-root: UUID="615e0a0e-e9ec-42c3-850c-f43177ae8c47" TYPE="xfs"
/dev/sda2: UUID="134b73ad-ec00-4162-8e76-d0ce457fe564" TYPE="xfs" PARTUUID="5d920359-1e72-4410-8d7e-3c2fef000260"
/dev/sda3: UUID="uaUNkw-F3J9-feJL-03vX-gFaf-jRfO-oZ8VNE" TYPE="LVM2_member" PARTUUID="43d60100-b377-4381-b75d-a6a03518a814"
/dev/sda1: UUID="5CC1-83AD" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="70ee3ede-84fa-435b-8796-3397618336fd"
```
実施手順
```console
[root@host01 /]# mkdir -p /path/to/backup     # バックアップ
[root@host01 /]# 
[root@host01 /]# rsync -av /home/ /path/to/backup/
sending incremental file list
./
(略)

[root@host01 /]# umount /home       # アンマウント。使用中などでできない場合は lsof +D /home → kill -9 PID
[root@host01 /]# 
[root@host01 ~]# lvremove /dev/mapper/rhel-home    # rhel-homeを削除
Do you really want to remove active logical volume rhel/home? [y/n]: y
  Logical volume "home" successfully removed.
[root@host01 ~]# 
[root@host01 ~]# lvextend -l +100%FREE /dev/mapper/rhel-root    # rhel-root LVMsizeを拡張
  Size of logical volume rhel/root changed from <69.99 GiB (17917 extents) to <3.49 TiB (913948 extents).
  Logical volume rhel/root successfully resized.
[root@host01 ~]# 
[root@host01 ~]# xfs_growfs /                                   # / FSsizeを拡張
meta-data=/dev/mapper/rhel-root  isize=512    agcount=4, agsize=4586752 blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=1 inobtcount=1 nrext64=0
data     =                       bsize=4096   blocks=18347008, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=16384, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 18347008 to 935882752

[root@host01 ~]# vi /etc/fstab      # /homeのエントリを削除
[root@host01 ~]# 
[root@host01 ~]# mount -a
[root@host01 ~]# 
[root@host01 ~]# rsync -av /path/to/backup/ /home/   #/homeリストア
```

実施後確認
```console:
[root@host01 ~]# df -H
ファイルシス          サイズ  使用  残り 使用% マウント位置
devtmpfs                4.2M     0  4.2M    0% /dev
tmpfs                   270G     0  270G    0% /dev/shm
tmpfs                   108G   76M  108G    1% /run
efivarfs                312k  215k   92k   71% /sys/firmware/efi/efivars
/dev/mapper/rhel-root   3.9T   33G  3.9T    1% /
/dev/sda2               1.1G  521M  487M   52% /boot
/dev/sda1               620M  7.4M  612M    2% /boot/efi
tmpfs                    54G   62k   54G    1% /run/user/42
tmpfs                    54G   37k   54G    1% /run/user/0
[root@host01 ~]#
[root@host01 ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda             8:0    0  3.5T  0 disk 
├─sda1          8:1    0  592M  0 part /boot/efi
├─sda2          8:2    0    1G  0 part /boot
└─sda3          8:3    0  3.5T  0 part 
  ├─rhel-root 253:0    0  3.5T  0 lvm  /
  └─rhel-swap 253:1    0    4G  0 lvm  [SWAP]
[root@host01 ~]# 
[root@host01 ~]# blkid
/dev/mapper/rhel-swap: UUID="dacc8c23-41c8-49f9-b8c4-bf53cdb7ee7d" TYPE="swap"
/dev/mapper/rhel-root: UUID="615e0a0e-e9ec-42c3-850c-f43177ae8c47" TYPE="xfs"
/dev/sda2: UUID="134b73ad-ec00-4162-8e76-d0ce457fe564" TYPE="xfs" PARTUUID="5d920359-1e72-4410-8d7e-3c2fef000260"
/dev/sda3: UUID="uaUNkw-F3J9-feJL-03vX-gFaf-jRfO-oZ8VNE" TYPE="LVM2_member" PARTUUID="43d60100-b377-4381-b75d-a6a03518a814"
/dev/sda1: UUID="5CC1-83AD" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="70ee3ede-84fa-435b-8796-3397618336fd"
```

## ・認識されている物理ディスクでrootのボリュームを増やす
たとえば上記からさｒにsdb,sdc,sddと物理ディスクが認識されている場合
```
# 1. 未使用ディスクの物理ボリューム化
pvcreate /dev/sdb
pvcreate /dev/sdc
pvcreate /dev/sdd

# 2. ボリュームグループに物理ボリュームを追加
vgextend rhel /dev/sdb
vgextend rhel /dev/sdc
vgextend rhel /dev/sdd

# 3. 論理ボリュームを拡張
lvextend -l +100%FREE /dev/rhel/root

# 4. ファイルシステムをリサイズ
resize2fs /dev/rhel/root  # ext4の場合
xfs_growfs /  # xfsの場合
```


## ・ディスクの初期化
ディスクの内容を全削除したい場合
```
dd if=/dev/zero of=/dev/sdb bs=1G status=progress
or
blkdiscard /dev/sdb
```
blkdiscardの方が書き込みを行わない分高速

以上。