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