RHEL5,6,7,8,9で変更された主要まとめ

# RHEL5,6,7,8で変更された主要まとめ

RHELのバージョン混在環境で、困惑するのでまとめてみました。
まあ、今更RHEL5はないでしょうが一応、記載しておきます。
また、調査しても分からない箇所もありましたので、追々追加していきます。

|パッケージ|RHEL 5|RHEL 6|RHEL 7|RHEL 8|RHEL 9|
|:---:|:---:|:---:|:---:|:---:|:---:|
|カーネル|2.6.18|2.6.32|3.10.0|4.18|5.14|
|Grub|Grub 0.97|Grub 0.97|Grub2 v2.00|||
|GUI|Gnome 2.16|Gnome 2.28|Gnome 3.8|Gnome 3.28|Gnome 4.0|
|起動シーケンス|SysVinit|Upstart|systemd|systemd|systemd|
|Logging|Syslog|Rsyslog|journalctl plus Rsyslog|journalctl plus Rsyslog|journalctl plus Rsyslog|
|User  Password|MD5|SHA-512|SHA-512|SHA-512||
|パッケージ管理|yum<br>rpm|yum<br>rpm|yum<br/>rpm|dnf<br/>yum<br>rpm|dnf<br/>yum<br>rpm|
|時刻同期|ntp|ntp|ntp<br>chrony|chrony|chrony|
|ディスプレイサーバ|Xorg|Xorg|Xorg|Wayland|Wayland|
|パケットフィルタリング|iptables|iptables<br/>firewalld|iptables<br>firewalld|nftable|firewalld<br>nftable<br>xdp-filter|
|サポートされる最大CPU||448|768|768|1792|
|サポートされる最大メモリ||12TB|12TB|24TB|48TB|
|サポートされる最大ファイル||XFS:100TB<br>Ext4:16TB|XFS:500TB<br>Ext4:16TB|XFS:8EB<br>Ext4:16TB|XFS:8EB<br>Ext4:16TB|
|FS最大サイズ||XFS:300TB<br>Ext4:16TB|XFS:500TB<br>Ext4:50TB|XFS:1PB<br>Ext4:50TB|XFS:1PB<br>Ext4:50TB|

**RHEL8の主なバージョン**
OpenSSL 1.1.1、TLS 1.3,GCC 8.2、OpenJDK 11/8などがサポートされる。PythonはPython 3.6がデフォルト、Node.jsのサポートや、PHP 7.2、Ruby 2.5、Perl 5.26などが提供される。データベースはMariaDB 10.3、MySQL 8.0、PostgreSQL 10/9.6、redis 5、Apache HTTP 2.4、nginx 1.14がデフォルト。

**RHEL9の主なバージョン**
OpenSSL 3.0.1、TLS 1.3,GCC 11.2.1、OpenJDK 17/11などがサポートされる。PythonはPython 3.9がデフォルト、Node.js 16、PHP 8.0、Ruby 3.0、Perl 5.32などが提供される。データベースはMariaDB 10.5、MySQL 8.0、PostgreSQL 13、redis 6.2、Apache HTTP 2.4.15、nginx 1.20がデフォルト。

## サービス系コマンド

RHEL 7,8,9では、サービス起動デーモンとして、SysVinit/Upstartに代わり、systemdが導入されました。これにより、サービス系コマンドが大幅に変更されています。RHEL8,9でもsystemdが採用されていることからRHEL7とは差異はありません。

### サービス逐次起動系

| 処理内容                   | RHEL 5,6                               | RHEL 7,8,9                                        |
| -------------------------- | -------------------------------------- | ----------------------------------------------- |
| 状態の表示（サービス単位） | /sbin/service ※1 \<service_name> status | /usr/bin/systemctl status \<unit_name>           |
| 状態の表示（全サービス）   | /sbin/service --status-all             | /usr/bin/systemctl list-units ※2--type service |
| 起動                       | /sbin/service \<service_name> start     | /usr/bin/systemctl start \<unit_name>            |
| 終了                       | /sbin/service \<service_name> stop      | /usr/bin/systemctl stop \<unit_name>             |
| 強制終了                   | kill -9 PID \<process_name>             | kill -s 9 \<unit_name>                           |
| 再起動                     | /sbin/service \<service_name> restart   | /usr/bin/systemctl restart \<unit_name>          |
| 設定反映                   | /sbin/service \<service_name> reload    | /usr/bin/systemctl reload \<unit_name>           |

※1：/etc/init.d/service_nameでも同様
※2：list-unitsは省略可

### サービス自動起動系

| 処理内容                   | RHEL 5,6                              | RHEL 7,8,9                                            |
| -------------------------- | ------------------------------------- | --------------------------------------------------- |
| (全サービス)定義の表示     | ls /etc/init.d/                       | /usr/bin/systemctl list-unit-files --type \<service> |
| (サービス単位の)定義の登録 | /sbin/chkconfig --add \<service_name>  | /usr/bin/systemctl daemon-reload<br> ※3             |
| 自動起動の確認             | /sbin/chkconfig --list \<service_name> | /usr/bin/systemctl is-enabled \<unit_name>           |
| 自動起動の有効化           | /sbin/chkconfig \<service_name> on     | /usr/bin/systemctl enable \<unit_name>               |
| 自動起動の無効化           | /sbin/chkconfig \<service_name> off    | /usr/bin/systemctl disable \<unit_name>              |

※3：Unitファイルを再読み込みすることにより登録される


systemdでは、「Unit」という単位でさまざまな処理を行います。従来のサービスに相当する処理は「.service」という拡張子がつくファイルとして管理されており、サービス関連の処理を行うときは、この名前を指定します。Unitには、ほかにもマウントポイントの処理を行う「.mount」、デバイスの処理を行う「.device」、Unitをグループ化する「.target」などがあります。

また、自動起動の登録を行ったUnitは、「/usr/lib/systemd/system/unit_name」内の[Install]セクションのWantedByオプションで指定されているUnitのディレクトリ（例：/etc/systemd/system/multi-user.target.wants/）にシンボリックリンクが張られることにより、自動起動が有効となります。

RHEL 6と同じコマンドを利用したい方は……

RHEL 7,8,9のserviceコマンドやchkconfigコマンドは、systemctlコマンドにリダイレクトするシェルスクリプトとなっているのでそのまま利用できます。

- サービスの一時停止

```
$ sudo service crond stop
Redirecting to /bin/systemctl stop crond.service
```

- サービスの自動起動の無効化

```
$ sudo chkconfig crond off
Note: Forwarding request to 'systemctl disable crond.service'. rm '/etc/systemd/system/multi-user.target.wants/crond.service' 
```

ただし、chkconfig --listについては、出力結果にも注意書きがあるとおり、一部のサービスしか表示されないため注意が必要です。

```
$ chkconfig --list
Note: This output shows SysV services only and does not include native systemd services. SysV configuration data might be overridden by native systemd configuration. 
```

## ランレベル

RHEL 7,8では、従来のランレベルに相当する起動モードも「.target」という拡張子がつくUnitで管理されるようになっています。これまでのランレベルとの対応は、下記のとおりです。なお、targetファイルを自作して、独自の起動モードを利用することも可能です。

| 処理内容             | RHEL 5,6 | RHEL 7,8,9          |
| -------------------- | -------- | ----------------- |
| システム停止         | 0        | poweroff.target   |
| シングルユーザモード | 1        | rescue.target     |
| マルチユーザモード   | 3        | multi-user.target |
| グラフィカルモード   | 5        | graphical.target  |
| 再起動               | 6        | reboot.target     |
| 緊急モード           | N/A      | mergency.target   |



通常の起動の際は、いずれかのtargetへのシンボリックリンク（通常はmulti-user.targetかgraphical.target）となっているdefault.targetが参照されます。

### ランレベル系コマンドの一覧

| 処理内容                | RHEL 5,6                              | RHEL 7,8,9                                 |
| ----------------------- | ------------------------------------- | ---------------------------------------- |
| 起動モードの変更        | telinit <runlevel><br>init <runlevel> | systemctl isolate <target_name>          |
| 起動モードの認          | runlevel                              | systemctl list-units --type target       |
| Default起動モードの変更 | /etc/inittabの編集                    | sudo systemctl set-default <target_name> |
| Default起動モードの確認 | /etc/inittabの参照                    | systemctl get-default                    |



- rescue.target（従来のシングルユーザモード相当）に変更

```
$ sudo systemctl isolate rescue.target
```

- デフォルトの起動モードをマルチユーザモードへ変更

```
$ sudo systemctl set-default multi-user.target
$ rm '/etc/systemd/system/default.target'
$ ln -s '/usr/lib/systemd/system/multi-user.target' '/etc/systemd/system/default.target' 
```

- RHEL 6と同じコマンドを利用したい……

現在と1つ前のランレベルを表示するrunlevelコマンド、ランレベルを一時的に変更するtelinit（init）コマンドも利用できます。ただし、/etc/inittabは、ファイルそのものはあるもののコメントだけとなっているため、標準起動モードの変更については、systemctl set-default <target_name>の実行が必要なようです。

## ログ確認系コマンド

systemdによって起動されたUnitのログは、/var/log/journal以下にバイナリ形式で保存されるようになっています。そのため、ログの確認にはjournalctlコマンドを利用します。

ログ確認系コマンドの一覧は下記のとおりです。

| 処理内容                 | RHEL 5,6                        | RHEL 7,8,9                     |
| ------------------------ | ------------------------------- | ---------------------------- |
| (サービス単位の)ログ確認 | cat /var/log/\<service_name>     | journalctl -u \<unit_name>    |
| ログの更新監視           | tail -f /var/log/\<service_name> | journalctl -f -u \<unit_name> |
| 起動ログの確認           | dmesg                           | systemctl journalctl --dmesg |

journalctlによる表示には、デフォルトでページャ（less）で表示されます。パイプ処理などでページャを利用したくない場合は、--no-pagerオプションを付加します。また、--sinceオプションで相対時間（例：30 min ago）、絶対時間（2015-04-30）以降のログ出力、--outputオプションでJSONなどの各種形式で出力、-bオプションでN世代前のブートログ表示など、数多くの機能を備えています。
ただし、デフォルト設定のままの場合、/run/systemd/journal以下にログが書き込まれ、再起動すると消えてしまうので注意が必要です。再起動後もログを残すには、/var/log/journalを作成して、journaldの再起動（systemctl restart systemd-journald）を行う必要があります。

## ネットワーク系コマンド

RHEL 7,8では、ifconfigやnetstatといった馴染みのあるコマンドが含まれている、net-toolsパーッケージがインストールされなくなりました。

ネットワーク系コマンドの一覧は下記のとおりです。なお、ipコマンドのオプションは、一意な文字列まで入力すれば認識してくれるので、短縮表記例も併記しておきます。



| 処理内容                               | RHEL 5,6                                   | RHEL 7,8,9(フル表記)                             | RHEL 7,8,9(短縮表記例)                     |
| -------------------------------------- | ------------------------------------------ | ---------------------------------------------- | ---------------------------------------- |
| 全アクティブインターフェイスの情報表示 | /sbin/ifconfig                             | /sbin/ip address show<br>or /sbin/ip link show | /sbin/ip a<br>or /sbin/ip                |
| 特定インターフェイスの情報表示         | /sbin/ifconfig eth0                        | /sbin/ip address show<br>dev enp0s3            | /sbin/ip a s<br>dev enp0s3               |
| ルーティングテーブルの表示             | /sbin/route                                | /sbin/ip route                                 | /sbin/ip r                               |
| デフォルトゲートウェイの追加           | /sbin/route add default gw xxx.xxx.xxx.xxx | ip route add default via xxx.xxx.xxx.xxx       | /sbin/ip r a default via xxx.xxx.xxx.xxx |
| デフォルトゲートウェイの削除           | /sbin/route del default gw xxx.xxx.xxx.xxx | ip route del default via xxx.xxx.xxx.xxx       | /sbin/ip r d default via xxx.xxx.xxx.xxx |
| TCPの接続状態の表示                    | /bin/netstat -tan                          | ss -tan                                        | 左に同じ                                 |
| インターフェイスごとの統計情報         | /bin/netstat -i                            | ip -s link                                     | ip -s                                    |
| ARPテーブルの表示                      | /sbin/arp -n                               | /sbin/ip neighbour                             | /sbin/ip n                               |


MAC Address /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/udev/rules.d/70-persistent-net.rules

RHEL 6と同じコマンドを利用したい方は……
net-toolsパッケージをインストールすれば、RHEL 6で使用していたネットワーク系コマンドはすべて利用可能となります。

### NetworkManager系コマンド
NetworkManagerは、RHEL 4から搭載されているネットワークユーティリティで、RHEL 7で新しく追加されたわけではありません。しかし、RHEL 7より、ネットワーク設定にはこのユーティリティを使用することが推奨されるようになったので、今後は利用頻度が高くなると思います。

NetworkManagerには、X上で動作するGUIツールのほか、ターミナル上でGUIで設定できるnmtuiコマンド、CUIで設定するnmcliコマンドがあります。ここでは、最も利用しやすいとnmcliコマンドを用いたNetworkManager系コマンドを下記に紹介します。

なお、デバイスを示す「デバイス名」と、接続に名前をつけた「接続名」は異なることがあるので注意してください。

| 処理内容                       | nmcliコマンド（フル表記）                                    | nmcliコマンド（短縮表記例）                                  |
| ------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
| デバイス一覧の表示             | /usr/bin/nmcli device                                        | /usr/bin/nmcli d                                             |
| デバイス情報の表示             | /usr/bin/nmcli device<br>show device_name                    | /usr/bin/nmcli d sh device_name                              |
| 接続の作成                     | /usr/bin/nmcli connection add type type_name ifname if_name con-name connection_name | /usr/bin/nmcli c a type type_name ifname if_name con-name connection_name |
| 接続の削除                     | /usr/bin/nmcli connection delete connection_name             | /usr/bin/nmcli c de connection_name                          |
| 接続一覧の表示                 | /usr/bin/nmcli connection                                    | /usr/bin/nmcli c                                             |
| 接続情報の表示(すべて)         | /usr/bin/nmcli connection show connection_name               | /usr/bin/nmcli c s connection_name                           |
| 接続の変更                     | /usr/bin/nmcli connection modify ....                        | /usr/bin/nmcli c m ...                                       |
| 接続の開始                     | /usr/bin/nmcli connection up connection_name                 | /usr/bin/nmcli c u connection_name                           |
| 接続の停止                     | /usr/bin/nmcli connection down connection_name               | /usr/bin/nmcli c d connection_name                           |
| 接続情報の表示(特定フィールド) | /usr/bin/nmcli --fields field_name connection show connection_name | /usr/bin/nmcli -f field_name c s connection_name             |



### RHEL6でのNetworkManager

デフォルトで NetworkManager サービスが起動するため /etc/sysconfig/network-scripts/ifcfg-XXX の書式が従来と変わっています。

従来の書式で設定ファイルを書く場合は、設定ファイルに下記の1行を追加します。
NM_CONTROLLED=no

もしくは NetworkManager サービスを停止します。

```
# chkconfig NetworkManager off
# service NetworkManager stop
```

### RHEL6でのethX と MAC Address の紐付け

RHEL5では/etc/sysconfig/network-scripts/ifcfg-XXXにHWADDRとして記載していたが
RHEL6では、/etc/udev/rules.d/70-persistent-net.rules で指定します。

```
# cat /etc/udev/rules.d/70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device 0x14e4:0x164c (bnx2) (custom name provided by external tool)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:14:5e:fa:98:a2", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

# PCI device 0x14e4:0x164c (bnx2) (custom name provided by external tool)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:14:5e:fa:98:a0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
```

が、相変わらず、/etc/sysconfig/network-scripts/ifcfg-ethX にも HWADDR 指定があるので、両方を合わせないといけない。ifcfg-ethX の HWADDR は削除した方が幸せになれるかも知れません。

### ロードモジュール
RHEL6では、/etc/modprobe.conf が無くなりました。目的別に対応を説明します。

(1) initrdに投入する内蔵ディスク用のデバイス・ドライバの指定（alias scsi_hostadapterXX）
RHEL5 までは、mkinitrd コマンドは /etc/modporbe.conf をみて、そのサーバを起動するために必要なドライバを含む initrd を作成しました。initrd に含まれる初期化スクリプト init では、下記の例のように必要なドライバを直接 insmod しています。

```
echo "Loading ehci-hcd.ko module"
insmod /lib/ehci-hcd.ko
echo "Loading ohci-hcd.ko module"
insmod /lib/ohci-hcd.ko
...
```

RHEL6 では、initrd の作成が dracut に変わって、サーバ個別の initrd ではなく、汎用的な initrd が作成されるようになったので、/etc/modprobe.conf による指定は不要になりました。dracut が作成する initrd では、udev によって、サーバ接続されたデバイスに応じたドライバを自動判別してロードします。

具体的には、initrd に含まれる etc/udev/rules.d/80-drivers.rules のルールから modprobe が呼び出されます。

```
# cat 80-drivers.rules
# do not edit this file, it will be overwritten on update

ACTION!="add", GOTO="drivers_end"

DRIVER!="?*", ENV{MODALIAS}=="?*", RUN+="/sbin/modprobe -b $env{MODALIAS}"
SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="SD", RUN+="/sbin/modprobe -b tifm_sd"
SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="MS", RUN+="/sbin/modprobe -b tifm_ms"
SUBSYSTEM=="memstick", RUN+="/sbin/modprobe -b --all ms_block mspro_block"
SUBSYSTEM=="i2o", RUN+="/sbin/modprobe -b i2o_block"
SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_device", TEST!="[module/sg]", RUN+="/sbin/modprobe -b sg"
SUBSYSTEM=="module", KERNEL=="parport_pc", RUN+="/sbin/modprobe -b ppdev"

LABEL="drivers_end"
```

そうは言っても特定のドライバを特定の順序で読み込ませたい場合は、カーネルオプション rdloaddriver にドライバを読み込む順に記載します。具体的には、init スクリプトから下記のスクリプトが実行されて、指定のドライバがロードされます。

```
# cat cmdline/01parse-kernel.sh
#!/bin/sh

for p in $(getargs rdloaddriver=); do
        modprobe $p
done
```

dracut が標準で initrd に含めないドライバを使用する際は、dracut の -d オプションで強制的に initrd に入れておきます。dracut については、[レッドハットニュースレター：vol.53 - dracut](http://www.jp.redhat.com/magazine/jp/201102/rhel.html) もどうぞ。


2) NIC用のデバイス・ドライバの指定（alias ethXX）

サーバ起動後の追加のドライバのロードは、すべて udev で処理されるようになっています。具体的には、rc.sysinit から start_udev したタイミングで、/lib/udev/rules.d/80-drivers.rules に従って自動的に modprobe されます。（dracut 内部の動作と基本的には同じです。）

```
# cat /lib/udev/rules.d/80-drivers.rules
# do not edit this file, it will be overwritten on update

ACTION!="add", GOTO="drivers_end"

DRIVER!="?*", ENV{MODALIAS}=="?*", RUN+="/sbin/modprobe -b $env{MODALIAS}"
SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="SD", RUN+="/sbin/modprobe -b tifm_sd"
SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="MS", RUN+="/sbin/modprobe -b tifm_ms"
SUBSYSTEM=="memstick", RUN+="/sbin/modprobe -b --all ms_block mspro_block"
SUBSYSTEM=="i2o", RUN+="/sbin/modprobe -b i2o_block"
SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_device", TEST!="[module/sg]", RUN+="/sbin/modprobe -b sg"
SUBSYSTEM=="module", KERNEL=="parport_pc", RUN+="/sbin/modprobe -b ppdev"

LABEL="drivers_end"
```

ちなみに、udev が必要なドライバを判別する方法は次のとおりです。まず、PCI デバイスなどは、/sys に登録されるとカードに固有の modalias 情報が登録されます。

```
# cat /sys/devices/pci0000:00/0000:00:06.0/0000:03:00.0/0000:04:00.0/modalias
pci:v000014E4d0000164Csv00001014sd00000342bc02sc00i00
```

一方、各ドライバは、サポートするデバイスの modalias 情報を持ちます。下記の alias: 部分です。

```
# modinfo bnx2
filename:       /lib/modules/2.6.32-71.el6.x86_64/kernel/drivers/net/bnx2.ko
firmware:       bnx2/bnx2-rv2p-09ax-5.0.0.j10.fw
firmware:       bnx2/bnx2-rv2p-09-5.0.0.j10.fw
firmware:       bnx2/bnx2-mips-09-5.0.0.j15.fw
firmware:       bnx2/bnx2-rv2p-06-5.0.0.j3.fw
firmware:       bnx2/bnx2-mips-06-5.0.0.j6.fw
version:        2.0.8-j15
license:        GPL
description:    Broadcom NetXtreme II BCM5706/5708/5709/5716 Driver
author:         Michael Chan <mchan@broadcom.com>
srcversion:     8CDA41B3E0DF70A112FBA80
alias:          pci:v000014E4d0000163Csv*sd*bc*sc*i*
alias:          pci:v000014E4d0000163Bsv*sd*bc*sc*i*
alias:          pci:v000014E4d0000163Asv*sd*bc*sc*i*
alias:          pci:v000014E4d00001639sv*sd*bc*sc*i*
alias:          pci:v000014E4d000016ACsv*sd*bc*sc*i*
alias:          pci:v000014E4d000016AAsv*sd*bc*sc*i*
alias:          pci:v000014E4d000016AAsv0000103Csd00003102bc*sc*i*
alias:          pci:v000014E4d0000164Csv*sd*bc*sc*i*
alias:          pci:v000014E4d0000164Asv*sd*bc*sc*i*
alias:          pci:v000014E4d0000164Asv0000103Csd00003106bc*sc*i*
alias:          pci:v000014E4d0000164Asv0000103Csd00003101bc*sc*i*
depends:
vermagic:       2.6.32-71.el6.x86_64 SMP mod_unload modversions
parm:           disable_msi:Disable Message Signaled Interrupt (MSI) (int)
```

これらの情報は、depmod がまとめて /lib/modules/$(uname -r)/modules.alias に記録しており、「modporbe 」を実行すると modules.alias から必要なドライバを判別して自動的にロードします。/lib/udev/rules.d/80-drivers.rules では、Kernel が udev に通知した modalias を使って modprobe しています。udev に勝手にロードしてほしくないドライバは、/etc/modprobe.d/blacklist.conf 内に blacklist オプションで指定しておきます。


## ホスト名操作系コマンド
RHEL 7,8,9では、ホスト名もsystemdが管理しているため、永続的なホスト名の変更方法も変更されました（hostnameコマンドを利用した一時的なホスト名の変更はRHEL 6と同じです）。

ホスト名操作系コマンドの一覧は下記のとおりです。

| 処理内容               | RHEL 5,6                     | RHEL 7,8,9                                                     |
| ---------------------- | ---------------------------- | ------------------------------------------------------------ |
| ホスト名の確認         | hostname                     | hostname or hostnamectl                                      |
| ホスト名の変更(永続的) | /etc/sysconfig/networkを編集 | hostnamectl set-hostname  new_host_name<br>,/etc/hostnameを編集 |


なお、「`nmcli global hostname new_host_hame`」を実行して、NetworkManager経由でも変更することができます。

## ファイアウォール系コマンド

RHEL 7では、ファイアウォールとしてfirewalldが導入されました。これは、内部的にはiptablesを利用しているものの、「ゾーン」と呼ばれるiptablesとはまったく異なる機能を提供しているため、コマンド一覧は割愛します（iptabelesサービスとの併用もできません）。

RHEL 8では、ファイアウォールとして**nftables**が新たにiptableと置き換えで実装されたパケットフィルターです。

デフォルトでは nftablesは RHEL 7 での iptables と同様に、firewalld のバックエンドとして動作するので、既に firewalld に移行している場合はあまり気にならないかもしれません。

### nftables を利用するメリット

- フィルターの処理が、線形処理からテーブル探索に（処理速度の高速化）

- IPv4とIPv6をひとつのコマンドで管理可能に（*ip6tables* のような、IPv6専用コマンドは使いません）

- ネットワーク層以外のプロトコルも管理可能に（*entables*と*arptables*は、*nftables*に統合されました）

- 一貫性があり、簡潔な文法（iptables の *–dport* のようなプロトコル独自の拡張はありません）


### モジュール組み込み
aliasの記載もRHEL6,7では変更されている。

| RHEL 5             | RHEL 6                                              | RHEL 7,8,9                                            |
| ------------------ | --------------------------------------------------- | --------------------------------------------------- |
| /etc/modprobe.conf | /etc/modprobe.d/<br>※bondingのaliasはnet-alias.conf | /etc/modprobe.d/<br>※bondingのaliasはnet-alias.conf |



## Storage
FS Type,Size

<table>
<tr>
  <th rowspan="2">Release</th>
  <th rowspan="2">Default FS</th>
  <th rowspan="2">暗号化 FS</th>
  <th colspan=2>Maximum</th>
</tr>
<tr>
  <th>Volume size</th>
  <th>File size</th>
</tr>
<tr>
  <td>RHEL5</td>
  <td>ext3</td>
  <td>LUKS</td>
  <td>4-32TiB</td>
  <td>16GiB-2TiB</td>
</tr>
<tr>
  <td>RHEL6</td>
  <td>ext4</td>
  <td>LUKS</td>
  <td>1EiB</td>
  <td>16TiB</td>
</tr>
<tr>
  <td>RHEL7</td>
  <td>xfs</td>
  <td>LUKS</td>
  <td>16EiB</td>
  <td>8EiB</td>
</tr>
<tr>
  <td>RHEL8</td>
  <td>xfs</td>
  <td>LUKS2</td>
  <td>16EiB</td>
  <td>8EiB</td>
</tr>

<tr>
  <td>RHEL9</td>
  <td>xfs</td>
  <td>LUKS2</td>
  <td>16EiB</td>
  <td>8EiB</td>
</tr>
</table>



利用可能なFS

| Release | 利用可能なFS                           |
| ------- | -------------------------------------- |
| RHEL5   | ext3,ext4,GFS,GFS2,XFS                 |
| RHEL6   | ext3,ext4,GFS2,XFS                     |
| RHEL7   | ext3,ext4,GFS2,XFS,Btrfs               |
| RHEL8   | XFS,ext3,ext4、NFS、SMB、GFS2、Stratis |
| RHEL9   | XFS,ext3,ext4、NFS、SMB、GFS2 |


## Diskパーティション系コマンド

| ブート方式 | パーティション管理 |
| ---------- | ------------------ |
| BIOS       | MBR形式            |
| UEFI       | GPT形式            |



| 処理内容                                 | MBR形式                                                    | GPT形式                                         |
| ---------------------------------------- | ---------------------------------------------------------- | ----------------------------------------------- |
| サポートするファームウェア               | BIOS,UEFI                                                  | UEFI                                            |
| 基本パーティション                       | 最大4                                                      | 最大128                                         |
| 拡張パーティション                       | 1                                                          | 無し                                            |
| 拡張パーティション内の論理パーティション | 制限無し                                                   | 無し                                            |
| ツール                                   | fdisk、parted                                              | parted,gdisk,gparted                            |
| ブートローダの制限                       | ハードディスクの2.2TB内                                    | 9.4ZB(ゼタバイト)                               |
| Redhat Linux サポート状況                | RHEL 5 x86<br>RHEL 5 x86_64<br>RHEL 6 x86<br>RHEL 6 x86_64 | RHEL 6 x86_64<br>RHEL 7 x86_64<br>RHEL 8 x86_64 |

(*)各ディスクの先頭に保存されているMBR（マスター・ブート・レコード）はパーティション・テーブルのデータ長が32bitです。よって2の32乗セクタ×512bytes＝約2.2Tbytesとなります。

BIOSとUEFIではパーティション管理形式も異なります。BIOSではMBR形式のみです。一方UEFIではMBR形式とGPT形式がサポートされています。
RHEL5,6ではpartedが OS 標準のRPMとして含まれている。
RHEL7 では gdisk が OS 標準のRPMとして含まれている。

2TBを越えるディスク領域を使用する際の注意事項 
パーティション作成にはpartedユーティリティを使用し、GPT(GUIDパーティションテーブル)を使用します。fdiskでは2TBを越えるディスクスペースは扱えません。
Anacondaインストーラーは、GPTをサポートしていない為、2TBを越えるディスクスペースは扱えません。
/boot, / パーティションは 2TB未満のディスク領域にインストールする必要があります。

■■■　ファイルシステム系コマンド　■■■
RHEL 7ではファイルシステムもext4からxfsに変更されています。
・EXT4 と XFS コマンドの参照表

| 処理内容                                 | ext3                    | ext4                    | XFS                 | Btrfs                       |
| ---------------------------------------- | ----------------------- | ----------------------- | ------------------- | --------------------------- |
| FS作成                                   | mkfs.ext3               | mkfs.ext4               | mkfs.xfs            | mkfs.btrfs                  |
| FSをマウントする                         | mount                   | mount                   | mount               | mount                       |
| FSのサイズを変更する                     | resize2fs               | resize2fs               | xfs_growfs<br> [※1] | btrfs filesystem resize     |
| FSの準備を整える                         | e2fsck<br>fsck.ext3     | e2fsck<br>fsck.ext4     | xfs_repair          | btrfsck                     |
| FSのラベルを変更する                     | e2label                 | e2label                 | xfs_admin -L        | btrfs property              |
| ディスク領域およびファイル使用量を報告   | quota,quotaon, repquota | quota,quotaon, repquota | xfs_quota           | btrfs quota                 |
| FSをデバッグする                         | debugfs                 | debugfs                 | xfs_db              |                             |
| FSの重要なメタデータをファイルに保存する | e2image                 | e2image                 | xfs_metadump        | btrfs-image                 |
| FSの情報表示                             | dumpe2fs                | dumpe2fs                | xfs_info            |                             |
| FSのメタデータの変更                     | tune2fs                 | tune2fs                 | xfs_admin           | btrfs property              |
| FSのバックアップ                         | dump                    | dump                    | xfsdump             | btrfs image                 |
| FSのリストア                             | restore                 | restore                 | xfsrestore          | btrfs image                 |
| ファイルのディスク上のブロック一覧表示   | filefrag                | filefrag                | xfs_bmap            |                             |
| FSのデフラグ                             | e4defrag                | e4defrag                | xfs_fs              | btrfs filesystem defragment |
| FSの一時停止                             | fsfreeze                | fsfreeze                | xfs_freeze,fsfreeze |                             |

※1：XFSファイルシステムのサイズは縮小できません。サイズを拡大する場合にのみコマンドを使用します。  

### XFSの設定のポイント

ほとんどのシステムでは特別なチューニングを行うことなくデフォルトの状態でXFSを利用できますが、要件によっては設定次第で性能が向上する可能性があります。例えば、RAIDアレイ上にXFSを構築する場合、ストライプユニットをRAIDアレイのストライプユニットと一致させることにより、性能向上が期待できます。ストレージデバイスがOSに自身のストライプユニットを通知している場合は、特にユーザーが設定する必要はありません。手動でストライプユニット、ストライプ幅を設定する場合、以下のようにしてファイルシステムを作成します。

```
# mkfs.xfs -d su=64k,sw=4 /dev/sda1
```

suはファイルシステムのストライプユニット、swはストライプ幅を意味します。swにはストライピングを構成するハードディスクの数（パリティディスクは含まない）を設定します。

上記の設定をした場合、ジャーナル領域へのログ書き込みのストライプユニットも同様の値に設定されます（上記の例では64kB）。もし同期書き込みが多いワークロードでXFSを使用する場合、ログ書き込みのストライプユニットが大きいと性能低下の原因となることがあります。そのような場合、以下のようにログ書き込みのストライプユニットを最小値（1ブロックサイズ：通常は4kB）に設定すると性能が改善するかもしれません。

```
# mkfs.xfs -d su=64k,sw=4 -l su=4k /dev/sda1
```

また、ログ書き込みのオーバヘッドを改善する対処策としては、ログが書き出されるジャーナル領域を、データ用の領域として使用するデバイスとは別に用意するという方法も考えられます。
その場合、以下のようにしてファイルシステムを作成します。

```
# mkfs.xfs -d su=64k,sw=4 -l logdev=/dev/sdb1 /dev/sda1
```

上記コマンドでは、データ用の領域を/dev/sda1に、ジャーナル領域を/dev/sdb1に作成しています。

## 最後に
今回調べてみて、RHEL 7,8,9での変更点の多さを改めて痛感しました。もはや、これまでのRHELとは別のOSになったような雰囲気すらあります。ただし、RHELにかぎらず、多くのディストリビューションがsystemdへの対応を表明していますので、使いこなせるようになっておきたいところです。そのためにも、今回は詳しくは触れられなかった、Unitの仕組みの理解が不可欠と思いました。