LinuxでHDDを増設した時の設定

#はじめに

LPIC 1 で習った内容だが，実践する機会に恵まれなかったLinux での論理ボリューム作成等の方法について，実際に実行してみたのでまとめてみた．

##前提
- OSはCent OS 8
- 追加のデバイスがOS に認識されている
- /data01 (マウント先)が作成されている
- コマンドが存在しない場合は以下のようにインストールしておく (以下は、Ubuntuの場合)
    - sudo apt install lvm2
    - sudo apt install xfsprogs

#デバイスの確認

lsblk コマンドを実行し，デバイスを確認する．今回は，ディスク容量30 GB のsdb をマウントする．

```terminal:実行コマンド
# lsblk
AME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    0   20G  0 disk 
├─sda1        8:1    0    1G  0 part /boot
└─sda2        8:2    0   19G  0 part 
  ├─cl-root 253:0    0   17G  0 lvm  /
  └─cl-swap 253:1    0    2G  0 lvm  [SWAP]
sdb           8:16   0   30G  0 disk <-こいつを使えるようにする
sr0          11:0    1  6.7G  0 rom  /run/media/centos/CentOS-8-BaseOS-x86_64
```

#LVM ボリュームの作成

fdisk コマンドを実行し，LVM ボリュームを作成する．

```terminal:実行コマンド
# fdisk /dev/sdb
fdisk (util-linux 2.32.1) へようこそ。
ここで設定した内容は、書き込みコマンドを実行するまでメモリのみに保持されます。
書き込みコマンドを使用する際は、注意して実行してください。

デバイスには認識可能なパーティション情報が含まれていません。
新しい DOS ディスクラベルを作成しました。識別子は 0x1a7585c5 です。

コマンド (m でヘルプ): m

ヘルプ:

  DOS (MBR)
   a   起動可能フラグを切り替えます
   b   入れ子の BSD ディスクラベルを編集します
   c   DOS 互換フラグを切り替えます

  一般
   d   パーティションを削除します
   F   パーティションのない領域を一覧表示します
   l   既知のパーティションタイプを一覧表示します
   n   新しいパーティションを追加します
   p   パーティション情報を表示します
   t   パーティションタイプを変更します
   v   パーティション情報を検証します
   i   パーティションの情報を表示します

  その他
   m   このメニューを表示します
   u   表示項目の単位を変更します
   x   特殊機能に移動します (熟練者向け機能)

  スクリプト
   I   ディスクのレイアウトを sfdisk 互換のスクリプトから読み込みます
   O   ディスクのレイアウトを sfdisk 互換のスクリプトに書き出します

  保存と終了
   w   パーティション情報をディスクに書き込んで終了します
   q   変更点を保存せずに終了します

  新しいラベルを作成します
   g   新しい (何もない) GPT パーティションテーブルを作成します
   G   新しい (何もない) SGI (IRIX) パーティションテーブルを作成します
   o   新しい (何もない) DOS パーティションテーブルを作成します
   s   新しい (何もない) Sun パーティションテーブルを作成します


コマンド (m でヘルプ): n
パーティションタイプ
   p   基本パーティション (0 プライマリ, 0 拡張, 4 空き)
   e   拡張領域 (論理パーティションが入ります)
選択 (既定値 p): 

既定の回答 p であるものとみなします。
パーティション番号 (1-4, 既定値 1): 
最初のセクタ (2048-62914559, 既定値 2048): 
最終セクタ, +セクタ番号 または +サイズ{K,M,G,T,P} (2048-62914559, 既定値 62914559): 62914559

新しいパーティション 1 をタイプ Linux、サイズ 30 GiB で作成しました。

コマンド (m でヘルプ): t
パーティション 1 を選択
16 進数コード (L で利用可能なコードを一覧表示します): L

 0  空              24  NEC DOS         81  Minix / 古い Li bf  Solaris        
 1  FAT12           27  隠し NTFS WinRE 82  Linux スワップ  c1  DRDOS/sec (FAT-
 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  84  隠し OS/2 また  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     85  Linux 拡張領域  c7  Syrinx         
 5  拡張領域        41  PPC PReP Boot   86  NTFS ボリューム da  非 FS データ   
 6  FAT16           42  SFS             87  NTFS ボリューム db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux プレーン  de  Dell ユーティリ
 8  AIX             4e  QNX4.x 第2パー  8e  Linux LVM       df  BootIt         
 9  AIX 起動可能    4f  QNX4.x 第3パー  93  Amoeba          e1  DOS access     
 a  OS/2 ブートマネ 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O        
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor      
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad ハ ea  Rufus alignment
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         eb  BeOS fs        
 f  W95 拡張領域 (L 54  OnTrackDM6      a6  OpenBSD         ee  GPT            
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        ef  EFI (FAT-12/16/
11  隠し FAT12      56  Golden Bow      a8  Darwin UFS      f0  Linux/PA-RISC  
12  Compaq 診断     5c  Priam Edisk     a9  NetBSD          f1  SpeedStor      
14  隠し FAT16 <32M 61  SpeedStor       ab  Darwin ブート   f4  SpeedStor      
16  隠し FAT16      63  GNU HURD または af  HFS / HFS+      f2  DOS セカンダリ 
17  隠し HPFS/NTFS  64  Novell Netware  b7  BSDI fs         fb  VMware VMFS    
18  AST SmartSleep  65  Novell Netware  b8  BSDI スワップ   fc  VMware VMKCORE 
1b  隠し W95 FAT32  70  DiskSecure Mult bb  隠し Boot Wizar fd  Linux raid 自動
1c  隠し W95 FAT32  75  PC/IX           bc  Acronis FAT32 L fe  LANstep        
1e  隠し W95 FAT16  80  古い Minix      be  Solaris ブート  ff  BBT            
16 進数コード (L で利用可能なコードを一覧表示します): 8e
パーティションのタイプを 'Linux' から 'Linux LVM' に変更しました。

コマンド (m でヘルプ): w
パーティション情報が変更されました。
ioctl() を呼び出してパーティション情報を再読み込みします。
ディスクを同期しています。

```

最後の「w」を実行するまで，設定は書き込まれないので，誤った場合は，「q」でいったん終了させる．

#パーティションの確認

パーティションの状況を確認する．

```terminal:実行コマンド
# fdisk -l /dev/sdb
ディスク /dev/sdb: 30 GiB, 32212254720 バイト, 62914560 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x1a7585c5

デバイス   起動 開始位置 終了位置   セクタ サイズ Id タイプ
/dev/sdb1           2048 62914559 62912512    30G 8e Linux LVM
```

#物理ボリュームの作成

pvcreate コマンドを実行し，物理ボリュームを作成する．

```terminal:実行コマンド
# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created
```

#物理ボリュームの確認

pvdisplay コマンドを実行し，作成結果を確認する．

```terminal:実行コマンド
# pvdisplay
"/dev/sdb1" is a new physical volume of "<30.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               <30.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               Ix3Usf-par2-FMNM-XW0A-6tBl-5clP-4CmxxJ
```

#ボリュームグループの作成

ボリュームグループを作成する．今回はVG01 という名前にする．

```terminal:実行コマンド
# vgcreate VG01 /dev/sdb1
Volume group "VG01" successfully created
```

#ボリュームグループの確認

vgdisplay コマンドを実行する．

```terminal:実行コマンド
# vgdisplay
--- Volume group ---
  VG Name               VG01
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <30.00 GiB
  PE Size               4.00 MiB
  Total PE              7679
  Alloc PE / Size       0 / 0   
  Free  PE / Size       7679 / <30.00 GiB
  VG UUID               nuCPxf-O2hG-7XyC-YGgZ-yGJu-om25-IMtsqU
```

vgscan コマンドを実行する．

```terminal:実行コマンド
# vgscan
Reading all physical volumes.  This may take a while...
Found volume group "VG01" using metadata type lvm2
```

#論理グループの作成

lvcreate コマンドを実行し，論理グループを作成する．

```terminal:実行コマンド
# lvcreate --name data -l 100%FREE VG01
  Logical volume "data" created.
```

#論理グループの確認

lvdisplay コマンドを実行し，作成結果を確認する．

```terminal:実行コマンド
# lvdisplay
--- Logical volume ---
  LV Path                /dev/VG01/data
  LV Name                data
  VG Name                VG01
  LV UUID                zHliYv-65wo-VmiQ-fRCO-YXR1-UBj8-5U7ZdI
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2020-06-17 12:52:27 +0900
  LV Status              available
  # open                 0
  LV Size                <30.00 GiB
  Current LE             7679
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2
```

#ファイルシステムの作成

以下のコマンドを実行し，ファイルシステムを作成する．

```terminal:実行コマンド
# mkfs.xfs /dev/VG01/data
meta-data=/dev/VG01/data         isize=512    agcount=4, agsize=1965824 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=7863296, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=3839, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
```

#マウントの実行

/etc/fstab の末尾に追記をして，マウントを実行する．
マウントポイントのディレクトリはあらかじめ作成しておくこと

```sh:/etc/fstab
/dev/VG01/data /data xfs defaults 0 0
```

設定を反映する．

```terminal:実行コマンド
# mount -a
```

エラーメッセージが出力されなければ，OK．

#ディスクサイズの確認

最後に，ディスクサイズを確認する．

```terminal:実行コマンド
# df -h
/dev/mapper/VG01-data    30G  247M   30G    1% /data01
```

ちゃんとマウントされていて，ディスクサイズも確認できる．