Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2722

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

$
0
0

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

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

パッケージRHEL 5RHEL 6RHEL 7RHEL 8
カーネル2.6.182.6.323.10.04.18
GrubGrub 0.97Grub 0.97Grub2 v2.00
GUIGnome 2.16Gnome 2.28Gnome 3.8Gnome 3.28
起動シーケンスSVR4 initUpstartsystemdsystemd
LogingSyslogRsyslogjournalctl plus Rsyslogjournalctl plus Rsyslog
User PasswordMD5SHA-512SHA-512SHA-512
パッケージ管理yum
rpm
yum
rpm
yum
rpm
dnf
yum
rpm
時刻同期ntpntpntp
chrony
chrony
ディスプレイサーバXorgXorgXorgWayland
パケットフィルタリングiptablesiptables
firewalld
iptables
firewalld
nftable

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がデフォルト。

サービス系コマンド

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

サービス逐次起動系

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

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

サービス自動起動系

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

※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の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,6RHEL 7,8
システム停止0poweroff.target
シングルユーザモード1rescue.target
マルチユーザモード3multi-user.target
グラフィカルモード5graphical.target
再起動6reboot.target
緊急モードN/Amergency.target

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

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

処理内容RHEL 5,6RHEL 7,8
起動モードの変更telinit
init
systemctl isolate
起動モードの認runlevelsystemctl list-units --type target
Default起動モードの変更/etc/inittabの編集sudo systemctl set-default
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 の実行が必要なようです。

ログ確認系コマンド

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

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

処理内容RHEL 5,6RHEL 7,8
(サービス単位の)ログ確認cat /var/log/journalctl -u
ログの更新監視tail -f /var/log/journalctl -f -u
起動ログの確認dmesgsystemctl 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,6RHEL 7,8(フル表記)RHEL 7,8(短縮表記例)
全アクティブインターフェイスの情報表示/sbin/ifconfig/sbin/ip address show
or /sbin/ip link show
/sbin/ip a
or /sbin/ip
特定インターフェイスの情報表示/sbin/ifconfig eth0/sbin/ip address show
dev enp0s3
/sbin/ip a s
dev enp0s3
ルーティングテーブルの表示/sbin/route/sbin/ip route/sbin/ip r
デフォルトゲートウェイの追加/sbin/route add default gw xxx.xxx.xxx.xxxip 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.xxxip route del default via xxx.xxx.xxx.xxx/sbin/ip r d default via xxx.xxx.xxx.xxx
TCPの接続状態の表示/bin/netstat -tanss -tan左に同じ
インターフェイスごとの統計情報/bin/netstat -iip -s linkip -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
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では、ホスト名もsystemdが管理しているため、永続的なホスト名の変更方法も変更されました(hostnameコマンドを利用した一時的なホスト名の変更はRHEL 6と同じです)。

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

処理内容RHEL 5,6RHEL 7,8
ホスト名の確認hostnamehostname or hostnamectl
ホスト名の変更(永続的)/etc/sysconfig/networkを編集hostnamectl set-hostname new_host_name
,/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専用コマンドは使いません)

  • ネットワーク層以外のプロトコルも管理可能に(entablesarptablesは、nftablesに統合されました)

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

モジュール組み込み

aliasの記載もRHEL6,7では変更されている。

RHEL 5RHEL 6RHEL 7,8
/etc/modprobe.conf/etc/modprobe.d/
※bondingのaliasはnet-alias.conf
/etc/modprobe.d/
※bondingのaliasはnet-alias.conf

Storage

FS Type,Size

ReleaseDefault FS暗号化 FSMaximum
Volume sizeFile size
RHEL5ext3LUKS4-32TiB16GiB-2TiB
RHEL6ext4LUKS1EiB16TiB
RHEL7xfsLUKS16EiB8EiB
RHEL8xfsLUKS216EiB8EiB

利用可能なFS

Release利用可能なFS
RHEL5ext3,ext4,GFS,GFS2,XFS
RHEL6ext3,ext4,GFS2,XFS
RHEL7ext3,ext4,GFS2,XFS,Btrfs
RHEL8XFS,ext3,ext4、NFS、SMB、GFS2、Stratis

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

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

処理内容ext3ext4XFSBtrfs
FS作成mkfs.ext3mkfs.ext4mkfs.xfsmkfs.btrfs
FSをマウントするmountmountmountmount
FSのサイズを変更するresize2fsresize2fsxfs_growfs
[※1]
btrfs filesystem resize
FSの準備を整えるe2fsck
fsck.ext3
e2fsck
fsck.ext4
xfs_repairbtrfsck
FSのラベルを変更するe2labele2labelxfs_admin -Lbtrfs property
ディスク領域およびファイル使用量を報告quota,quotaon, repquotaquota,quotaon, repquotaxfs_quotabtrfs quota
FSをデバッグするdebugfsdebugfsxfs_db
FSの重要なメタデータをファイルに保存するe2imagee2imagexfs_metadumpbtrfs-image
FSの情報表示dumpe2fsdumpe2fsxfs_info
FSのメタデータの変更tune2fstune2fsxfs_adminbtrfs property
FSのバックアップdumpdumpxfsdumpbtrfs image
FSのリストアrestorerestorexfsrestorebtrfs image
ファイルのディスク上のブロック一覧表示filefragfilefragxfs_bmap
FSのデフラグe4defrage4defragxfs_fsbtrfs filesystem defragment
FSの一時停止fsfreezefsfreezexfs_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での変更点の多さを改めて痛感しました。もはや、これまでのRHELとは別のOSになったような雰囲気すらあります。ただし、RHELにかぎらず、多くのディストリビューションがsystemdへの対応を表明していますので、使いこなせるようになっておきたいところです。そのためにも、今回は詳しくは触れられなかった、Unitの仕組みの理解が不可欠と思いました。


Viewing all articles
Browse latest Browse all 2722

Trending Articles