Linuxの一般的なこと

更新日:2021/12/30

Linuxを扱う上での、一般的なことをメモしています。
基本的に、CentOS8が対象です。

dnfのコマンド

RHEL/CentOSの8からyumから、dnfに置き換わります。
yumもまだ一応使えるっぽいですが、廃止することになっているので、dnfを使うようにしたいです。
というわけで、コマンドをメモしておきます。

コマンド 説明
dnf updateインストールされているソフトウェアをすべて最新化する
dnf listパッケージリストの一覧を表示(インストールされていないものも含む)
dnf list installedパッケージリストの一覧を表示(インストールされているもののみ)
dnf install (パッケージ名)指定したパッケージをインストールする
dnf remove (パッケージ名)指定したパッケージをアンインストールする

/etc/fstabのUUIDについて

fstabには、パーティーションの識別にUUIDを使うようになりました。
どのパーティーションがどのuuidなのか・・・の調べ方は以下の通り。

以下のコマンドを実行する。 ls -l /dev/disk/by-uuid

[root@localhost disk]# ls -l /dev/disk/by-uuid
total 0
lrwxrwxrwx. 1 root root 10 Nov 23 01:28 609af316-be15-4b45-8747-637f211e7011 -> ../../dm-0
lrwxrwxrwx. 1 root root 10 Nov 23 01:28 c7e33166-38b5-44c6-94b6-e75a858abb15 -> ../../dm-1
lrwxrwxrwx. 1 root root 10 Nov 23 01:28 c92c4197-6037-46b4-93f8-18658bf07ea7 -> ../../vda1

/dev/disk/by-uuidディレクトリの中に、UUIDと、それがどのデバイスファイルに紐づくののか・・・のシンボリックリンクがあります。
これを見て、判断する感じになると思います。

virtbr0を消す(仮想環境を使わない場合)

仮想環境を実行する環境ではない場合、virtbr0は不要なので消したくなります。
以下のコマンドで、libvirtdが起動しないようにすることで、virtbr0を作らないようにすることで、消えてなくなります(以下のコマンドを実行後、再起動する)。

systemctl disable libvirtd

ロケールの設定(日本語の追加)

現在設定されているロケールは、以下のコマンドで表示可能

[root@zabTargetServer1 ~]# localectl status
   System Locale: LANG=en_US.UTF-8
       VC Keymap: us
      X11 Layout: n/a

選択可能なロケールは、以下のコマンドで一覧表示できます。

# localectl list-locales

設定したいものが、上記の一覧に無い場合は、ロケールの追加が必要です。
日本語のロケールがインストールされていない場合、以下のコマンドで追加します。

# dnf install langpacks-ja

langpacks-jaをインストールすると「ja_JP.utf8」「ja_JP.eucjp」が指定可能になります。
以下のコマンドで、OSのロケールを「ja_JP.utf8」に変更します。

# localectl set-locale LANG=ja_JP.utf8

WindowsPCからリモートデスクトップを使い、Linuxサーバーに接続する(+SSHのポートフォワーディング)

WindowsPCにデフォルトでインストールされているリモートデスクトップを使い、Linuxに接続する方法です。
Linux側にxrdpというソフトウェアをインストールすることで、実現可能です。
前提として、Linux側にもデスクトップ環境が用意されている必要があります(用意する方法の手順も以下に記載しました)。
※ただし、xrdpは、epelのリポジトリからインストールする必要があるので注意。

デスクトップ環境がインストールされていない場合は、そのパッケージをインストールします。
以下のコマンドを実行するだけでOK(以下の例ではGNOME)

dnf groupinstall "Server with GUI"

リモートデスクトップを実現するためのソフトウェアをインストールします。
xrdpは、VNCを拡張したもの・・・らしいので、VNCのインストールも必要となります。
まずは、VNCをインストールすために以下のコマンドを実行。

dnf install tigervnc-server

次に、epelからxrdpをインストールします。
まずは、以下でepelのリポジトリを登録します。

dnf -y install epel-release

今後の運用も考えて、epelは指定したときだけONになるように、設定を行います。
/etc/yum.repos.d/epel.repo を開いて7行目の「enabled=1」を「enabled=0」に修正し、保存します。

その後、以下のコマンドでインストールします。

dnf --enablerepo=epel install xrdp

続いて、OS起動時に、xrdpを自動起動するようにします。
インストール直後、今すぐ起動させたい場合は、「systemctl start xrdp」も実行します。

systemctl enable xrdp

上記で、Linux側の設定は完了です。
ファイヤーウォールの3389ポートをopenにすれば、windows機から「リモートデスクトップ」でLinuxに接続可能です(リモートデスクトップは、デフォルトでは3389ポートを使用しています)。
しかし、ファイヤーウォールの設定を修正するのは面倒なので、ここでは、SSHポートフォワーディングを使用します(CentOS/RHELはインストール直後、SSHのポートがopen状態なので何も設定はいらない)。

teratermで対象のLinuxサーバーにログインします。
その状態から、teratermのメニューの中の「設定」→「SSH転送」を開きます。
出てきたウインドウの「追加」を押下し、以下のように入力し、「OK」ボタンを押下します(「SSHポート転送」のウインドウも「OK」ボタンを押下して、閉じる)。

(この設定は、teratermを動かしているPC上にて、127.0.0.1の3389ポートに送られたデータを、teratermが接続しているサーバーへ、SSH経由でデータの転送を行います。
そして、サーバ側で動いているSSHが、受信したデータをサーバーの3389ポート投げつけてくれます。ようするにトンネリングですね)

上記で、SSHポートフォワーディングの設定はOKです(teratermは接続したままにしてください。閉じると、ポートフォワーディングも終了してしまうので)。

Windowsの方から、リモートデスクトップを起動し、127.0.0.1を入力して接続します。



接続ボタンを押下すると、画面が切り替わり、以下の画面が表示されます。

ここでは、LinuxのOSアカウントのID/パスワードを入力します(VNCの場合は独自に設定したパスワードを入力していましたが、xrdpではOSのアカウントでログイン出来ます)。
ここで正しいID/パスワードを入力すれば、Linuxのデスクトップ画面が表示されます。

LVMでの領域割り当てなど

たまにしかやらないので、すぐ忘れるLVMの操作。
その割に結果が重大すぎるので、LVMのおさらいのメモと、各種操作についてまとめます。
対象はLVM2を対象とします。
(LVM1では、PEの数が65,536以下の必要がある・・・という制約がありますが、LVM2では無くなった。他、色々変わっているかも。)
「lvm version」というコマンドで、LVM1なのかLMV2なのか確認が可能です。
以下が実行例。

[root@localhost ~]# lvm version
  LVM version:     2.03.11(2)-RHEL8 (2021-01-28)
  Library version: 1.02.175-RHEL8 (2021-01-28)
  Driver version:  4.43.0
  Configuration:   ./configure --build=x86_64-redhat-linux-gnu --host=x86_64-redhat-linux-gnu --program-prefix= --disable-dependency-tracking --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64 --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/var/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-default-dm-run-dir=/run --with-default-run-dir=/run/lvm --with-default-pid-dir=/run --with-default-locking-dir=/run/lock/lvm --with-usrlibdir=/usr/lib64 --enable-fsadm --enable-write_install --with-user= --with-group= --with-device-uid=0 --with-device-gid=6 --with-device-mode=0660 --enable-pkgconfig --enable-cmdlib --enable-dmeventd --enable-blkid_wiping --with-cluster=internal --enable-cmirrord --with-udevdir=/usr/lib/udev/rules.d --enable-udev_sync --with-thin=internal --with-cache=internal --enable-lvmpolld --enable-lvmlockd-dlm --enable-lvmlockd-dlmcontrol --enable-lvmlockd-sanlock --enable-dbus-service --enable-notify-dbus --enable-dmfilemapd --with-writecache=internal --with-vdo=internal --with-vdo-format=/usr/bin/vdoformat --with-integrity=internal --disable-silent-rules

LVMの基本的な話のおさらい

まず、LVMを使う上で重要な用語からまとめます。

用語 意味
PV (physical volume) ハードディスクなどの物理的なパーティーションを指します。
HDDやSSDなどの物理デバイス上にパーティーションを作成し、そのフォーマットをLVMで使用する用のものに指定する(その後、pvcreateで初期化の必要有り)。
具体的にはfdiskでパーティーション作成後、そのパーティーションのフォーマットを「8e」に指定する(本当に8eでいいかは、fdiskでフォーマットIDを指定する際のコマンドで再確認する)。
PE (physical extent) LVMは、PEという単位で容量を管理します。
考え方として・・・。
・HDDが10台
・1台あたり1TBの容量(パーティーションは1個で、それに全部の容量が割り当たってる状態とする)
・PEの1個あたりの容量が128MB
という状態があったとします。
この場合、HDD1台あたり、PEが8192個作成されます(1TBを128MBで割り算する)。
そして、HDDが10台あるので、PEが合計81920個(8192個*10台)あることになります。
このPEという領域を使って、フレキシブルに論理的なパーティーションに領域を割り当てることになります。
VG (volume group) イメージとしては、1つの仮想的なHDDです。
上記で記載したPEを何個割り当てるかを設定し、Linux上に仮想的なHDDを作成します。
PEを何個割り当てるか設定を行うことで作成できます。
1TBのHDDが10台ある場合、10TBの容量がある仮想的なHDDを作り出すことも可能です。
LV (logical volume) VGで仮想的なHDDを作ったので、今度は、そのHDD上にパーティーションを作らないと、使えません。
なので、VG上にて作成するパーティーションのことをLVと言います。
もちろん、VGで設定された容量以下のパーティーションしか作れません。
パーティーションを作成して、フォーマットすることで、やっと使える領域となります。

LVM用にHDDのパーティーションを用意する

ここでは、新品のHDDを1台追加で接続した状態から、LVMの領域を追加してみます。
最初に、接続されているHDD類を把握するため、「fdisk -l」を実行します。

/dev/nvme0n1pXは、SSDです。起動ディスクなどに使用しているもので、今回の操作対象ではないです。
今回の操作対象は、赤枠で囲った/dev/sdaです。
今回は、2TBを超えるHDDなので、「ディスクラベルのタイプ」は「gpt」にする必要があるのが注意点です。

fdiskでパーティーションタイプ8eが選べないっぽいので(?)、仕方がないのでpartedコマンドで実行します。

/dev/sdaのHDDに対し、LVM用のパーティーションを作成します。
1つのパーティーションを作成し、3TB分を全部割り当てる操作を行います。
partedコマンドを使い/dev/sdaにLVM用のパーティーションを作成します。

/dev/sdaを引数にしてpartedを起動します。
helpと打ち込むと、コマンドの説明がでてくるので、これを頼りに操作していきます。
必ず「print」と打ち込み、今操作対象としているHDDが何なのかを確認してから、コマンドを実行します。
fdiskと違い、即時適応されるので、必ず確認してから操作します。
今回使用しているHDDは「モデル: ATA WDC WD30EFRX-68E (scsi)」で「ディスク /dev/sda: 3001GB」なので、間違っていないので、このディスクに対しLVMのパーティーションを作成していきます。

[root@localhost ~]# parted /dev/sda
GNU Parted 3.2
/dev/sda を使用
GNU Parted へようこそ! コマンド一覧を見るには 'help' と入力してください。
(parted) help ←「help」と打ち込んでenterキー押下で、コマンドの一覧が出てくる
  align-check TYPE N            パーティション N のアライメント(TYPE: min|opt)をチェックする
  help [コマンド]               ヘルプ表示。コマンド指定でそのヘルプを表示
  mklabel,mktable ラベルの種類  新しいラベル(パーティションテーブル)を作る
  mkpart パーティションの種類 [ファイルシステムの種類] 開始 終了
                    パーティションを作る
  name NUMBER 名前              パーティションに名前をつける
  print [devices|free|list,all|NUMBER]
                     パーティションテーブルや、利用可能なデバイス、空き領域、
                     見つかった全てのパーティション、あるいは特定のパーティションについて表示する
  quit                          プログラムを終了する
  rescue 開始 終了              開始、終了で指定した範囲付近にあるパーティションを復活させる
  resizepart NUMBER END         パーティション NUMBER を END にリサイズする
  rm NUMBER                     パーティションを削除する
  select デバイス               操作するデバイスを選択
  disk_set FLAG STATE           選択したデバイスの FLAG を変更
  disk_toggle [FLAG]            選択したデバイスの FLAG の状態をトグル
  set NUMBER フラグ 状態        ファイルシステムのフラグと状態を設定する
  toggle [NUMBER [FLAG]]        パーティションのフラグの状態を反転する
  unit UNIT                     デフォルトの単位を UNIT にする
  version                       GNU Parted のバージョンと著作権情報を表示
(parted) print ←「print」で現在の操作対象や設定結果などが出てくる
モデル: ATA WDC WD30EFRX-68E (scsi)
ディスク /dev/sda: 3001GB
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: gpt
ディスクフラグ:

番号  開始  終了  サイズ  ファイルシステム  名前  フラグ

(parted)

上記の状態から引き続き・・・。 2TBを超えるHDDなので、gpt形式に変換します(上記のprintを見るとすでになっているぽいですが、念のため)。
そして、LVM用のパーティーションを作成するまでの一連の流れが以下のものです。

(parted) mklabel gpt ←gpt形式を指定する
警告: いま存在している /dev/sda のディスクラベルは破壊され、このディスクの全データが失われます。続行しますか?
はい(Y)/Yes/いいえ(N)/No? Y ←Yを入力し、実行する
(parted) mkpart ←パーティーション作成を行う
パーティションの名前?  []? ←何も入力せずenterキー押下でOK
ファイルシステムの種類?  [ext2]? ←何も入力せずenterキー押下でOK
開始? 0% ←色々指定する形式があるが、全部割り当てるので0%~100%の範囲指定をするため、「0%」と入力
終了? 100% ←「100%」と入力
(parted) print ←実行結果を見てみるためprintを実行
モデル: ATA WDC WD30EFRX-68E (scsi)
ディスク /dev/sda: 3001GB
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: gpt
ディスクフラグ:

番号  開始    終了    サイズ  ファイルシステム  名前  フラグ
 1    1049kB  3001GB  3001GB  ext2

(parted) set 1 lvm on ←LVM用に使用するため、左記コマンドを実行(「1」は上記にでてきた番号に該当)>
(parted) print ←設定結果を確認するためprintを実行>
モデル: ATA WDC WD30EFRX-68E (scsi)
ディスク /dev/sda: 3001GB
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: gpt
ディスクフラグ:

番号  開始    終了    サイズ  ファイルシステム  名前  フラグ
 1    1049kB  3001GB  3001GB  ext2                    lvm ※3TB分割り当たっていて、LVMのフラグがONになっているのでOK

(parted) quit ←上記のprint結果を確認し、OKなので、partedを終了する
通知: 必要であれば /etc/fstab を更新するのを忘れないようにしてください。

[root@localhost ~]#

partedでパーティーションの割り当てが終わったら、改めfdiskで状態を見てみます。
以下のようになってればOKです。


念のため・・・。
意味合いとしては/dev/sdaというハードディスク上に1つパーティーションを作成(LVMフォーマットになっている)し、そのパーティーションは/dev/sda1・・・という意味です。
これを把握しないと、以降の操作が「?」になりますので・・・。

PVの作成

PVの作成を行います。
「pvs」コマンドで、現在のPVの一覧が表示されます(表示されている/dev/nvme0n1p3は、このサーバーにすでに追加済みのものです。環境によって出てくるもの・出てこないものに差異があります)。

[root@localhost ~]# pvs ←現在のPVの一覧を表示するコマンド
  PV             VG Fmt  Attr PSize   PFree
  /dev/nvme0n1p3 cl lvm2 a--  929.92g    0 ←今回追加しようとしている/dev/sda1はまだ一覧に表示されていません。
[root@localhost ~]# pvcreate /dev/sda1  これで/dev/sda1をLVMのPVとして追加する
  Physical volume "/dev/sda1" successfully created.
[root@localhost ~]# pvs ←もう一度、PVの一覧を表示させると、/dev/sda1が追加されていることが分かります
  PV             VG Fmt  Attr PSize   PFree
  /dev/nvme0n1p3 cl lvm2 a--  929.92g     0
  /dev/sda1         lvm2 ---   <2.73t <2.73t
[root@localhost ~]#

VGの作成

VGの作成を行います。
「vgs」コマンドで、現在のVGの一覧を表示させます(すでに表示されている「cl」は、このサーバーにすでに存在しているもので、環境によって違います)。
このサーバーには、SSDしか接続されていなかったのが、今回HDDを追加しました。
SSDとHDDを混在させてLVMで同一の領域として扱ってもよいのですが、そんなことをするとどうなっちゃうのか分からないので(多分パフォーマンス的に良くない)、新たにHDD用のVGとして新規追加します。
なので、vgcreateを使ってVGを新規作成します。名前は「userdata」としています。

[root@localhost ~]# vgs ←現在のVGの一覧を表示するコマンド
  VG #PV #LV #SN Attr   VSize   VFree
  cl   1   4   0 wz--n- 929.92g    0
[root@localhost ~]# vgcreate userdata /dev/sda1 ←VGを新規作成(/dev/sda1の領域を使う設定)
  Volume group "userdata" successfully created
[root@localhost ~]# vgs ←もう一度VGを一覧表示させると、「userdata」というVGが追加されているのが分かります
  VG       #PV #LV #SN Attr   VSize   VFree
  cl         1   4   0 wz--n- 929.92g     0
  userdata   1   0   0 wz--n-  <2.73t <2.73t
[root@localhost ~]# vgdisplay userdata ←作成した、「userdata」の詳細を表示させてみます。PEはデフォルトで4MBのサイズになります
  --- Volume group ---
  VG Name               userdata
  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               <2.73 TiB
  PE Size               4.00 MiB
  Total PE              715396
  Alloc PE / Size       0 / 0
  Free  PE / Size       715396 / <2.73 TiB
  VG UUID               hya3gh-SevA-eZSA-jn1m-1gtz-3bBX-8g6zr5

715396個のPEが出来上がりました。
このPEを使って領域を割り当てることとなります。

LVの作成

先ほど作成したVG上に、LVを作成します。
「lvcreate」コマンドで作成しますが、その時、作成するLVのサイズ指定の方法がいくつかあります。今回はPEの数を直接指定しています。
以下のコマンドでは、PEの数を1024個と指定しています。
なので、PEの1個あたり4MiBなので、4GBの領域を割り当てることとなります。

[root@localhost ~]# lvs ←現在のLVの一覧を表示(ここで表示されるのは、すでに作成済みのもの)
  LV   VG Attr       LSize    Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  home cl -wi-ao----   20.00g
  root cl -wi-ao----   70.00g
  swap cl -wi-ao----   15.63g
  virt cl -wi-ao---- <824.29g
[root@localhost ~]# lvcreate -l 1024 -n userdata1 userdata ←新たに「userdata」上にLVを「userdata1」という名前で作成する。PEの数は1024個を指定
WARNING: xfs signature detected on /dev/userdata/userdata1 at offset 0. Wipe it? [y/n]: y ←なぜだか警告が出る。そもそも何もない空っぽの状態なのでyを入力
  Wiping xfs signature on /dev/userdata/userdata1.
  Logical volume "userdata1" created.
[root@localhost ~]# lvs
  LV        VG       Attr       LSize    Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  home      cl       -wi-ao----   20.00g
  root      cl       -wi-ao----   70.00g
  swap      cl       -wi-ao----   15.63g
  virt      cl       -wi-ao---- <824.29g
  userdata1 userdata -wi-a-----    4.00g ←新たに作成したVG「userdata」上に作成したLV「userdata1」
[root@localhost ~]# vgdisplay userdata ←VG「userdata」の情報を表示。先ほど作成した分だけFree PEの数が減っていることが分かる
  --- Volume group ---
  VG Name               userdata
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <2.73 TiB
  PE Size               4.00 MiB
  Total PE              715396
  Alloc PE / Size       1024 / 4.00 GiB
  Free  PE / Size       714372 / <2.73 TiB
  VG UUID               hya3gh-SevA-eZSA-jn1m-1gtz-3bBX-8g6zr5

[root@localhost ~]#

LVが作成されると、/dev/以下に、項目が追加されます。
・/dev/dm-X (Xの部分は番号。環境によって番号は異なる)
・/dev/userdataディレクトリ(そして、この中にuserdata1という「/dev/dm-X」へのシンボリックリンクが作られている)
・/dev/mapper/userdata-userdata1 (「/dev/dm-X」へのシンボリックリンク。これがLV作成直後に作成されるのかは、自信無し・・・) LVM上に作られたパーティーションに、/dev/userdata/userdata1を使うことで、アクセスできるようになりました。

LV上のパーティーションをフォーマットして使える状態にする

作成したLVを、xfs(RHEL7から標準フォーマットになったらしい)でフォーマットして、なにか書き込んでみます。
書き込めることが確認できたら「/etc/fstab」を編集して、起動時に自動的にマウントされるようにしてみます。

[root@localhost ~]# mkfs -t xfs /dev/userdata/userdata1 ←先ほど作成してLVをxfsでフォーマットする
meta-data=/dev/userdata/userdata1 isize=512    agcount=4, agsize=262144 blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=1048576, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@localhost ~]# mount /dev/userdata/userdata1 /mnt ←試しに/mntにマウントしてみる
[root@localhost ~]# touch /mnt/abcdef ←なにか適当に書き込んでみる
[root@localhost ~]# ls -la /mnt ←ファイルが出来上がってるのでOK
合計 0
drwxr-xr-x.  2 root root  20  9月 26 21:57 .
dr-xr-xr-x. 18 root root 236  9月 26 17:55 ..
-rw-r--r--.  1 root root   0  9月 26 21:57 abcdef
[root@localhost ~]# df -h ←dfでちゃんとマウントされているかチェック
ファイルシス                   サイズ  使用  残り 使用% マウント位置
devtmpfs                          16G     0   16G    0% /dev
tmpfs                             16G     0   16G    0% /dev/shm
tmpfs                             16G  9.7M   16G    1% /run
tmpfs                             16G     0   16G    0% /sys/fs/cgroup
/dev/mapper/cl-root               70G  5.1G   65G    8% /
/dev/nvme0n1p2                  1020M  327M  694M   32% /boot
/dev/mapper/cl-home               20G  236M   20G    2% /home
/dev/nvme0n1p1                   599M  7.3M  592M    2% /boot/efi
/dev/mapper/cl-virt              824G  5.8G  819G    1% /virt
tmpfs                            3.1G  1.2M  3.1G    1% /run/user/42
tmpfs                            3.1G     0  3.1G    0% /run/user/0
/dev/mapper/userdata-userdata1   4.0G   61M  4.0G    2% /mnt ←追加されているのでOK
[root@localhost ~]#

とりあえず、/mntにマウントして書き込めることが確認出来たので、「/mnt」からアンマウントして、「/etc/fstab」を編集し、OS起動時に自動的にマウントされるように設定を行います。
一番最後の行のみ追加しています。
既存の設定では/dev/mapper以下のシンボリックリンクを使うようにしているので、それに合わせて「/dev/mapper/userdata-userdata1」を使うようにしてみました。
(新たに「/userdata」というディレクトリを作って、そこにマウントさせます)

/dev/mapper/cl-root     /                       xfs     defaults        0 0
UUID=4667d7d1-7a52-490f-87ab-ab707d979d60 /boot                   xfs     defaults        0 0
UUID=FB75-D652          /boot/efi               vfat    umask=0077,shortname=winnt 0 2
/dev/mapper/cl-home     /home                   xfs     defaults        0 0
/dev/mapper/cl-virt     /virt                   xfs     defaults        0 0
/dev/mapper/cl-swap     none                    swap    defaults        0 0
/dev/mapper/userdata-userdata1 /userdata        xfs     defaults        0 0  ←追加行

再起動後、dfコマンドを実行し、以下のように認識されていればOKです。

[root@localhost ~]# df -h
ファイルシス                   サイズ  使用  残り 使用% マウント位置
devtmpfs                          16G     0   16G    0% /dev
tmpfs                             16G     0   16G    0% /dev/shm
tmpfs                             16G  9.7M   16G    1% /run
tmpfs                             16G     0   16G    0% /sys/fs/cgroup
/dev/mapper/cl-root               70G  5.1G   65G    8% /
/dev/nvme0n1p2                  1020M  327M  694M   32% /boot
/dev/mapper/cl-home               20G  236M   20G    2% /home
/dev/nvme0n1p1                   599M  7.3M  592M    2% /boot/efi
/dev/mapper/cl-virt              824G  5.8G  819G    1% /virt
/dev/mapper/userdata-userdata1   4.0G   61M  4.0G    2% /userdata  ←追加されているのでOK
tmpfs                            3.1G  1.2M  3.1G    1% /run/user/42
tmpfs                            3.1G     0  3.1G    0% /run/user/0
[root@localhost ~]#

作成したLVのxfsパーティーションの容量を追加したい

xfsフォーマットは、パーティーションサイズを追加することは可能です。
逆の、サイズを少なくすることは出来ません(その場合は、パーティーション作り直し)。
ここでは、xfsフォーマットで作成したパーティーションの容量追加を試しにやってみます。

まず、VGの空き容量をチェックします。
「vgs」コマンドを使い、VGの一覧と、残容量について確認します。
これから容量を拡大しようとしているLVは「userdata」にあるものです。 なので、「userdata」は2.73TB程度空きがあるので、PEの空きは十分あることがわかります。

[root@localhost ~]# vgs
  VG       #PV #LV #SN Attr   VSize   VFree
  cl         1   4   0 wz--n- 929.92g     0
  userdata   1   1   0 wz--n-  <2.73t <2.73t
[root@localhost ~]#

まず、変更前の状態のvgdisplayとdfの結果を残しておきます。

[root@localhost ~]# df -h
ファイルシス                   サイズ  使用  残り 使用% マウント位置
devtmpfs                          16G     0   16G    0% /dev
tmpfs                             16G     0   16G    0% /dev/shm
tmpfs                             16G  9.7M   16G    1% /run
tmpfs                             16G     0   16G    0% /sys/fs/cgroup
/dev/mapper/cl-root               70G  5.1G   65G    8% /
/dev/nvme0n1p2                  1020M  327M  694M   32% /boot
/dev/mapper/cl-home               20G  236M   20G    2% /home
/dev/nvme0n1p1                   599M  7.3M  592M    2% /boot/efi
/dev/mapper/cl-virt              824G  5.8G  819G    1% /virt
/dev/mapper/userdata-userdata1   4.0G   61M  4.0G    2% /userdata ←今回容量を拡張しようとしている対象。現在4GBの容量
tmpfs                            3.1G  1.2M  3.1G    1% /run/user/42
tmpfs                            3.1G     0  3.1G    0% /run/user/0
[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               cl
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  6
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                4
  Open LV               4
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               929.92 GiB
  PE Size               4.00 MiB
  Total PE              238060
  Alloc PE / Size       238060 / 929.92 GiB
  Free  PE / Size       0 / 0
  VG UUID               9Q7hzc-tVHh-qOKL-RiDj-mIxL-ky1x-uuomg9

  --- Volume group ---
  VG Name               userdata
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <2.73 TiB
  PE Size               4.00 MiB
  Total PE              715396
  Alloc PE / Size       1024 / 4.00 GiB
  Free  PE / Size       714372 / <2.73 TiB ←まだ使ってないPEは沢山ある状態
  VG UUID               hya3gh-SevA-eZSA-jn1m-1gtz-3bBX-8g6zr5

続いて、LVのサイズ変更から、xfsパーティーションの容量拡大の操作を行います。
xfsフォーマットの場合、マウントしたまま容量の拡大が行えるそうなので、マウントしたまま実行してみます。
LVのサイズ拡張には「lvextend」コマンドを使用します。
「-l」オプションで、設定するPEの数を指定しています。
「-l」オプションの注意点として指定するPEの数は、追加分なのではなく、何個にするのか・・・という結果の値を指定する必要があります(4096を指定すると、4096個割り当たる状態になる)。

[root@localhost ~]# lvextend -l 4096 /dev/mapper/userdata-userdata1 ←PEを4096個に指定するように変更
  Size of logical volume userdata/userdata1 changed from 4.00 GiB (1024 extents) to 16.00 GiB (4096 extents).
  Logical volume userdata/userdata1 successfully resized.
[root@localhost ~]# vgdisplay ←lvextend追加後、VGの状態を表示してみる
  --- Volume group ---
  VG Name               cl
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  6
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                4
  Open LV               4
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               929.92 GiB
  PE Size               4.00 MiB
  Total PE              238060
  Alloc PE / Size       238060 / 929.92 GiB
  Free  PE / Size       0 / 0
  VG UUID               9Q7hzc-tVHh-qOKL-RiDj-mIxL-ky1x-uuomg9

  --- Volume group ---
  VG Name               userdata
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  5
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <2.73 TiB
  PE Size               4.00 MiB
  Total PE              715396
  Alloc PE / Size       4096 / 16.00 GiB
  Free  PE / Size       711300 / 2.71 TiB ←1024個の状態から4096個の状態に変更したので、その分減っている
  VG UUID               hya3gh-SevA-eZSA-jn1m-1gtz-3bBX-8g6zr5

LVのサイズ変更が完了しましたが、まだファイルシステム側(xfs)に反映ができていません。
なので、LVのサイズとしては16GBありますが、認識されているのはまだ4GBのままの状態です。

[root@localhost ~]# lvs
  LV        VG       Attr       LSize    Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  home      cl       -wi-ao----   20.00g
  root      cl       -wi-ao----   70.00g
  swap      cl       -wi-ao----   15.63g
  virt      cl       -wi-ao---- <824.29g
  userdata1 userdata -wi-ao----   16.00g ←こちらはPEが4096個分(=16GB)のサイズに変更されている
[root@localhost ~]# df -h
ファイルシス                   サイズ  使用  残り 使用% マウント位置
devtmpfs                          16G     0   16G    0% /dev
tmpfs                             16G     0   16G    0% /dev/shm
tmpfs                             16G  9.7M   16G    1% /run
tmpfs                             16G     0   16G    0% /sys/fs/cgroup
/dev/mapper/cl-root               70G  5.1G   65G    8% /
/dev/nvme0n1p2                  1020M  327M  694M   32% /boot
/dev/mapper/cl-home               20G  236M   20G    2% /home
/dev/nvme0n1p1                   599M  7.3M  592M    2% /boot/efi
/dev/mapper/cl-virt              824G  5.8G  819G    1% /virt
/dev/mapper/userdata-userdata1   4.0G   61M  4.0G    2% /userdata ←だけど、こちらは4GBのままの状態
tmpfs                            3.1G  1.2M  3.1G    1% /run/user/42
tmpfs                            3.1G     0  3.1G    0% /run/user/0
[root@localhost ~]#

なので、次はファイルシステム側に容量追加の設定を行います。
ファイルシステムがxfsの場合は、専用のコマンド「xfs_growfs」が用意されているので、こちらを使います。
「xfs_growfs」は、オプションでサイズ指定を行いますが、それを省略すると、割り当てられる最大のサイズまで拡張してくれます。
なので、例もオプションのサイズ指定を省略しています。
コマンド実行後、再度、dfでチェックしてみると、16GBに変更されていることが分かります。

[root@localhost ~]# xfs_growfs /userdata
meta-data=/dev/mapper/userdata-userdata1 isize=512    agcount=4, agsize=262144 blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=1048576, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 1048576 to 4194304
[root@localhost ~]# df -h
ファイルシス                   サイズ  使用  残り 使用% マウント位置
devtmpfs                          16G     0   16G    0% /dev
tmpfs                             16G     0   16G    0% /dev/shm
tmpfs                             16G  9.7M   16G    1% /run
tmpfs                             16G     0   16G    0% /sys/fs/cgroup
/dev/mapper/cl-root               70G  5.1G   65G    8% /
/dev/nvme0n1p2                  1020M  327M  694M   32% /boot
/dev/mapper/cl-home               20G  236M   20G    2% /home
/dev/nvme0n1p1                   599M  7.3M  592M    2% /boot/efi
/dev/mapper/cl-virt              824G  5.8G  819G    1% /virt
/dev/mapper/userdata-userdata1    16G  148M   16G    1% /userdata ←サイズが16GBになっている
tmpfs                            3.1G  1.2M  3.1G    1% /run/user/42
tmpfs                            3.1G     0  3.1G    0% /run/user/0
[root@localhost ~]#

内部のネットワークとだけ通信を許可する設定(firewalldのダイレクトルール追加)

外と通信をさせたくないけど、自分が属しているローカルのネットワークとは通信させたい・・・という時があります。

firewalldは外から自分へのアクセスについては、制御を行いますが、自分から外に向けての通信は制御しません。
別途FWがあって、そこで遮断するなら特に問題ないですが・・・。
以下の設定は、サーバー自身のFWで、自分から外のネットワークに投げるパケットを遮断する方法です。
自分が属しているネットワークは「192.168.11.0/24」で、この中では、パケットの送信・受信を許可します。
そして、それ以外のパケットはすべてREJECTにする・・・という設定を、以下で追加します。

# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 --destination 192.168.11.0/24 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 2 -j REJECT
# firewall-cmd --reload

上記コマンドを実行し、適応されている設定を表示させてみます。

# firewall-cmd --direct --get-all-rules
ipv4 filter OUTPUT 1 --destination 192.168.11.0/24 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
ipv4 filter OUTPUT 2 -j REJECT

iptablesのコマンドでも詳細を表示できます

# iptables -L --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  anywhere             192.168.11.0/24      state NEW,RELATED,ESTABLISHED
2    REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable

ページの一番上へ