CentOS7,RHEL8,Ubuntu 20.04などでコンソール解像度を低くする


RHEL/CentOS6以降やUbuntu 18.04(?)以降など、最近にLinuxでは起動時に接続しているディスプレイの解像度を認識し、高解像度で表示しようとする。

これは Kernel Mode Setting (KMS) (kernel.orgの説明 / archlinux wikiの説明)の機能により実現されている。

しかし、複数台のサーバを設定する場合、モニタが1台しかないのでつなぎ替えて設定しようとすると、起動時にモニタがつながっていたサーバだけ解像度が高くなってしまう、という弊害がある。

この問題は、DELLサーバに搭載されるiDRAC機能によるリモートコンソール接続の時にも発生してしまい、起動時に物理モニタが接続されているサーバだけブラウザ上のコンソール表示が高解像度で表示されます。

これを避けるには強制的に解像度を指定する必要があります。

参考にした情報源

RedHat KB: RHEL 6 および RHEL 7 で VGA コンソールのテキスト解像度を 80×25 に設定する方法
archlinux wiki: GRUB/ヒントとテクニック の「3.1 フレームバッファの解像度を設定する
grubマニュアル: 6.1 Simple configuration handling
centos.org forum: How to change Grub menu resolution?

Ubuntu 20.04 Serverの場合

インストール直後は、起動直後に下記のようなgrubメニューが表示されない設定となっています。まずは、grubメニューが表示されるよう設定変更してください。(なお、設定手法については後述の /etc/default/grub の所に書いてあります)

grubメニューが表示されるようになったら、上記で止めて「c」を入力し、コマンドラインモードに変更します。

ここで「videoinfo」と入力します。

そうすると対応できる表示モードの一覧が出力されますが、モードが多い場合はスクロールしてしまい、全部を見ることができない場合があります。

そのような場合は「set pager=1」と入力し、そのあとに「videoinfo」を実行します。

なお、日本語キーボード利用時、= は、「^ へ ~」キー(通常の=の右隣)で入力出来ます。

解像度指定は「800x600x32」といったような形で行います。

実際にそれが使用できるかは「videotest 800x600x32」と実行します。

そうすると、下記の様に表示されます。これが読める状態であれば問題ありません。

このテストは終了する手法がないため、強制再起動します。(ctrl+alt+deleteなどで)

設定する解像度が決まったら普通にUbuntuを起動します。

設定するファイルは /etc/default/grub です。

Ubuntu 20.04をvSphere上でインストールした場合の初期値では下記の様になっていました。

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="maybe-ubiquity"
GRUB_CMDLINE_LINUX=""

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

grubメニューを表示して10秒まつ設定(“GRUB_TIMEOUT_STYLE=menu”と”GRUB_TIMEOUT=10” ) を入れて

そこに、コンソール解像度を設定するための以下の設定を入れます。

grubでの解像度を指定するための「GRUB_GFXMODE=800×600」
grubでの設定内容をkernel起動後も維持するための「GRUB_GFXPAYLOAD_LINUX=keep」と、「GRUB_CMDLINE_LINUX_DEFAULT=」行への「nomodeset」追加

これを行った後の /etc/default/grub の内容は下記の様になります。

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=menu
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="maybe-ubiquity nomodeset"
GRUB_CMDLINE_LINUX=""

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480
GRUB_GFXMODE=800x600
GRUB_GFXPAYLOAD_LINUX=keep

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

書き換えたらgrub.cfgを生成するため「sudo update-grub2」を実行します。

instadmin@ubuntu:~$ sudo update-grub2
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.4.0-91-generic
Found initrd image: /boot/initrd.img-5.4.0-91-generic
done
instadmin@ubuntu:~$

設定後、再起動して解像度が指定通りになっていることを確認します。

CentOS7の場合

RedHatのKBに記載があります:「RHEL 6 および RHEL 7 で VGA コンソールのテキスト解像度を 80×25 に設定する方法

上記KBでは640×480に設定していますが、他の解像度が指定できないものかCentOS7でいろいろ試してみましたが出来ませんでした。

設定は /etc/default/grub に行います。

CentOS7をvSphere環境上にインストールした場合、下記の様になっていました。

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap"
GRUB_DISABLE_RECOVERY="true"

この「GRUB_CMDLINE_LINUX=」行に「video=640×480」と「nomodeset」の両方を追加します。

RedHat KBではvideoだけでもいけるようなことを書いていましたが、実サーバ(DELL PowerEdge R640 UEFI設定)では問題なかったものの、vSphere仮想環境(BIOS設定)では起動途中で解像度が変わる動作をしたため「nomodeset」を追加しています。

ただ、KBにはnomodesetは悪、的な記述もあるので、ダメだったら追加する、ぐらいの方がいいかもしれません

追加後は以下の様な形になります。

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap video=640x480 nomodeset"
#GRUB_GFXMODE=800x600x24
GRUB_DISABLE_RECOVERY="true"

EFI環境の場合「grub2-mkconfig -o /etc/grub2-efi.cfg」、BIOS環境の場合「grub2-mkconfig -o /etc/grub2.cfg」を実行してgrub設定を更新します。

[root@centos7 ~]# grub2-mkconfig -o /etc/grub2.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-1160.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1160.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-2c896cb2eafd4db586ecfbd67535d5dc
Found initrd image: /boot/initramfs-0-rescue-2c896cb2eafd4db586ecfbd67535d5dc.img
done
[root@centos7 ~]#

この後、再起動して解像度が設定されていることを確認します。

参考情報

CentOS7の場合、Ubuntu 20.04と異なり、grubでのvideoinfo/videotestコマンドがなく、vdeinfo/vbetestコマンドとなります。

参考として、下記にCentOS7での実行の様子を記載します。

grubメニューで止めて、「c」を入力し、コマンドラインモードに入ります。

CentOS7の場合はvideoinfoが搭載されていないgrubなので「vbeinfo」を実行します。

CentOS7の場合は set pager=1 の設定がされているようで出力が多い場合でも表示を止めてくれます。

表示テストは「vbetest 800x600x32」といった形で実施します。(おなじくvideotestコマンドが無い)

vbetestの終了は強制再起動(ctrl+alt+deleteなど)を行います。

Oracle Linux 8の場合(2021/12/08)

/etc/default/grub にいろいろ記述を入れてみてるのですが、解像度変更ができる気配がない・・・

また、grubでのvideoinfo, vbeinfo, videotest, vbetest はない模様

RHEL 8.6/Oracle Linux 8.6の場合(2022/07/11)

/etc/default/grubのGRUB_CMDLINE_LINUXに「video=800×600」を追加してみたところ、それっぽく動いている。

なお、去年試した時と同じくgrubでのvideoinfo, vbeinfo, videotest, vbetest は存在していないようだ。

/etc/default/grubのGRUB_CMDLINE_LINUXに「video=1024×768」を追加でも大丈夫だった。

Ubuntu 20.04 でリンク速度固定をする


Ubuntu 20.04.3 Serverでリンク速度の固定をしようと思ったのだが、公式に類するドキュメントが発見できなかった。

手動でやる場合は ethtoolコマンド、というのは分かるのだが、起動時に自動設定する方法が分からない。

Desktop版の設定

Ubuntu 20.04 DesktopではNetworkManagerがネットワークの設定を担当しており、 /etc/NetworkManager ディレクトリ内に関連する設定ファイルがあった。

具体的には /etc/NetworkManager/system-connections/接続名.nmconnection というファイルが作成されていた。

そのファイル内の[ethernet]セクションに下記の記載をすることで設定された。

[ethernet]
mac-address-blacklist=
speed=100
duplex=full

Server版の場合

Ubuntu 20.04 Server版では systemd-networkd と netplanがネットワーク設定を担当している。

IPアドレス設定については netplan側で行い、 /etc/netplan/99_config.yaml などで設定する。

リンク速度固定についてはsystemd側で設定を行うようだった。

今回直接のヒントになった情報はこちら:Set network interface speed with systemd-networkd

上記サイトでは /etc/systemd/networkd/internet.link というファイルを作って設定している。(Ubuntu 20.04 だと /etc/systemd/networkd/ というディレクトリは無く /etc/systemd/network/ )

実際には拡張子「.link」が重要となっていて、NICの初期認識の時に読み込むファイル群ということになっている。

私の場合は /etc/systemd/network/99-default.link というファイル名で作成した。

複数のNICがあり、それぞれで異なる設定を行いたい場合は /etc/systemd/network/99-nic1.link と /etc/systemd/network/99-nic2.link とMatch条件ごとにファイルを分けて設定する形になる。

ドキュメント: systemd.link

[Match]セクションで条件に該当するデバイスを定義し、[Link]セクションで値を設定する、という作りになっている。

たとえばドライバ e1000e のNIC全てに同じ設定を入れる場合は下記の様になる。

[Match]
Driver=e1000e

[Link]
AutoNegotiation=no
BitsPerSecond=100M
Duplex=full

特定のMACアドレスに対してのみ適用したい場合は下記の様になる。

[Match]
PermanentMACAddress=00:0c:29:9c:7e:14

[Link]
AutoNegotiation=no
BitsPerSecond=1G
Duplex=half

なお、「MACAddress=~」で設定もできるが、Linuxでは物理的なMACアドレスに対して上書きで別途MACAddress値を設定してしまうことができる。

特にbonding設定時は必ずMACAddress値が変わってしまうため、物理的なデバイスについているPermanentMACAddressの値を使う必要がある。

bondingデバイス設定時などは「ip a s」で確認できるMACアドレスではなく、dmesgなどに登場する起動直後に認識しているMACアドレスを使う必要がある。

root@ubuntu:~# dmesg|grep eth
[    1.718483] e1000e 0000:03:00.0 eth0: (PCI Express:2.5GT/s:Width x1) 00:0c:29:9c:7e:0a
[    1.718709] e1000e 0000:03:00.0 eth0: Intel(R) PRO/1000 Network Connection
[    1.718927] e1000e 0000:03:00.0 eth0: MAC: 3, PHY: 8, PBA No: 000000-000
[    1.825725] e1000e 0000:0b:00.0 eth1: (PCI Express:2.5GT/s:Width x1) 00:0c:29:9c:7e:14
[    1.826001] e1000e 0000:0b:00.0 eth1: Intel(R) PRO/1000 Network Connection
[    1.826314] e1000e 0000:0b:00.0 eth1: MAC: 3, PHY: 8, PBA No: 000000-000
[    1.829127] e1000e 0000:03:00.0 ens160: renamed from eth0
[    1.843927] e1000e 0000:0b:00.0 ens192: renamed from eth1
root@ubuntu:~#

複数のMACアドレスを指定する場合は下記の様にスペースを空けて列挙する。

[Match]
PermanentMACAddress=00:0c:29:9c:7e:14 00:0c:29:9c:7e:0a

[Link]
AutoNegotiation=no
BitsPerSecond=100M
Duplex=full

NICのデバイス名 ens192などを指定できないかチャレンジしたのですが、「Name=」や「OriginalName=」を使用してみましたが動作しませんでした。

設定値の反映については、確認した限りではauto negotiationのon/off切り替えについては、再起動が必要でした。

auto-negotiation offになった後の、リンク速度変更については、設定記載後に「udevadm test-builtin net_setup_link /sys/class/net/デバイス名」を実行することで反映されました。

root@ubuntu:~# udevadm test-builtin net_setup_link /sys/class/net/ens160
Load module index
Parsed configuration file /etc/systemd/network/99-default.link
Parsed configuration file /usr/lib/systemd/network/73-usb-net-by-mac.link
Created link configuration context.
ID_NET_DRIVER=e1000e
ens160: Failed to get ACTION= property: No such file or directory
Using default interface naming scheme 'v245'.
ID_NET_LINK_FILE=/etc/systemd/network/99-default.link
Unload module index
Unloaded link configuration context.
root@ubuntu:~#

リンク速度が変わったことが確認できます。

root@ubuntu:~# dmesg|grep ens160
[ 5510.551597] e1000e: ens160 NIC Link is Up 100 Mbps Full Duplex, Flow Control: None
[ 5510.551771] e1000e 0000:03:00.0 ens160: 10/100 speed: disabling TSO
root@ubuntu:~#

失敗編

/etc/networkd-dispatcher/routable.d にスクリプトを配置して、 ethtoolを実行してTSO offさせる、的な記述を発見。(How to execute post-up scripts with netplan)

/etc/networkd-dispatcher/routable.d/990-speed を作成し下記の内容を書いてみたところ、なぜか1秒間隔でスクリプトが実行され続けてしまった・・・なぜ?

#!/bin/bash

/usr/sbin/ethtool -s ens192 autoneg off speed 100 duplex full
exit 0

失敗ではないものの、実は一番最初に見つけた「How to permanently disable TSO & GSO in Ubuntu 18.04」で/etc/systemd/network/01-tso-and-gso.link ファイルを作って下記を記述

[Match]
# Set a match condition appropriate for your use case
Name=*

[Link]
TCPSegmentationOffload=false
GenericSegmentationOffload=false

と書かれていたのがもっとも正解に近かったという・・・


2021/12/24 追記

udevadmの詳細表示は下記の様に実行する

osakanataro@ubuntu:~$ sudo SYSTEMD_LOG_LEVEL=debug udevadm test-builtin net_setup_link /sys/class/net/ens160
Trying to open "/etc/systemd/hwdb/hwdb.bin"...
Trying to open "/etc/udev/hwdb.bin"...
Trying to open "/usr/lib/systemd/hwdb/hwdb.bin"...
Trying to open "/lib/systemd/hwdb/hwdb.bin"...
Trying to open "/lib/udev/hwdb.bin"...
=== trie on-disk ===
tool version:          245
file size:         9953660 bytes
header size             80 bytes
strings            2163852 bytes
nodes              7789728 bytes
Load module index
Found container virtualization none.
timestamp of '/etc/systemd/network' changed
timestamp of '/run/systemd/network' changed
Parsed configuration file /usr/lib/systemd/network/99-default.link
Parsed configuration file /etc/systemd/network/98-ens34.link
Parsed configuration file /etc/systemd/network/98-ens224.link
Parsed configuration file /usr/lib/systemd/network/73-usb-net-by-mac.link
Created link configuration context.
ID_NET_DRIVER=vmxnet3
ens160: Config file /usr/lib/systemd/network/99-default.link is applied
ens160: Failed to get ACTION= property: No such file or directory
ethtool: autonegotiation is unset or enabled, the speed and duplex are not writable.
ens160: Device has name_assign_type=4
Using default interface naming scheme 'v245'.
ens160: Policy *keep*: keeping existing userspace name
ens160: Device has addr_assign_type=0
ens160: MAC on the device already matches policy *persistent*
Could not set AlternativeName= or apply AlternativeNamesPolicy= on ens160, ignoring: Operation not supported
ID_NET_LINK_FILE=/usr/lib/systemd/network/99-default.link
Unload module index
Unloaded link configuration context.
osakanataro@ubuntu:~$

NICデバイス名の算出に関しては下記

osakanataro@ubuntu:~$ sudo SYSTEMD_LOG_LEVEL=debug udevadm test-builtin net_id /sys/class/net/ens160
Trying to open "/etc/systemd/hwdb/hwdb.bin"...
Trying to open "/etc/udev/hwdb.bin"...
Trying to open "/usr/lib/systemd/hwdb/hwdb.bin"...
Trying to open "/lib/systemd/hwdb/hwdb.bin"...
Trying to open "/lib/udev/hwdb.bin"...
=== trie on-disk ===
tool version:          245
file size:         9953660 bytes
header size             80 bytes
strings            2163852 bytes
nodes              7789728 bytes
Load module index
Found container virtualization none.
timestamp of '/etc/systemd/network' changed
timestamp of '/run/systemd/network' changed
Parsed configuration file /usr/lib/systemd/network/99-default.link
Parsed configuration file /etc/systemd/network/98-ens34.link
Parsed configuration file /etc/systemd/network/98-ens224.link
Parsed configuration file /usr/lib/systemd/network/73-usb-net-by-mac.link
Created link configuration context.
Using default interface naming scheme 'v245'.
ID_NET_NAMING_SCHEME=v245
ID_NET_NAME_MAC=enx00505699e0a1
ID_OUI_FROM_DATABASE=VMware, Inc.
ID_NET_NAME_PATH=enp3s0
ID_NET_NAME_SLOT=ens160
Unload module index
Unloaded link configuration context.
osakanataro@ubuntu:~$

ちなみに ens34については100Mb固定設定を行っていて、下記の様な出力となる。

osakanataro@ubuntu:~$ sudo SYSTEMD_LOG_LEVEL=debug udevadm test-builtin net_setup_link /sys/class/net/ens34
Trying to open "/etc/systemd/hwdb/hwdb.bin"...
Trying to open "/etc/udev/hwdb.bin"...
Trying to open "/usr/lib/systemd/hwdb/hwdb.bin"...
Trying to open "/lib/systemd/hwdb/hwdb.bin"...
Trying to open "/lib/udev/hwdb.bin"...
=== trie on-disk ===
tool version:          245
file size:         9953660 bytes
header size             80 bytes
strings            2163852 bytes
nodes              7789728 bytes
Load module index
Found container virtualization none.
timestamp of '/etc/systemd/network' changed
timestamp of '/run/systemd/network' changed
Parsed configuration file /usr/lib/systemd/network/99-default.link
Parsed configuration file /etc/systemd/network/98-ens34.link
Parsed configuration file /etc/systemd/network/98-ens224.link
Parsed configuration file /usr/lib/systemd/network/73-usb-net-by-mac.link
Created link configuration context.
ID_NET_DRIVER=e1000
ens34: Config file /etc/systemd/network/98-ens34.link is applied
ens34: Failed to get ACTION= property: No such file or directory
ens34: Device has name_assign_type=4
Using default interface naming scheme 'v245'.
ens34: Policies didn't yield a name and Name= is not given, not renaming.
ID_NET_LINK_FILE=/etc/systemd/network/98-ens34.link
Unload module index
Unloaded link configuration context.
osakanataro@ubuntu:~$ sudo SYSTEMD_LOG_LEVEL=debug udevadm test-builtin net_id /sys/class/net/ens34
Trying to open "/etc/systemd/hwdb/hwdb.bin"...
Trying to open "/etc/udev/hwdb.bin"...
Trying to open "/usr/lib/systemd/hwdb/hwdb.bin"...
Trying to open "/lib/systemd/hwdb/hwdb.bin"...
Trying to open "/lib/udev/hwdb.bin"...
=== trie on-disk ===
tool version:          245
file size:         9953660 bytes
header size             80 bytes
strings            2163852 bytes
nodes              7789728 bytes
Load module index
Found container virtualization none.
timestamp of '/etc/systemd/network' changed
timestamp of '/run/systemd/network' changed
Parsed configuration file /usr/lib/systemd/network/99-default.link
Parsed configuration file /etc/systemd/network/98-ens34.link
Parsed configuration file /etc/systemd/network/98-ens224.link
Parsed configuration file /usr/lib/systemd/network/73-usb-net-by-mac.link
Created link configuration context.
Using default interface naming scheme 'v245'.
ID_NET_NAMING_SCHEME=v245
ID_NET_NAME_MAC=enx000c2953f0df
ID_OUI_FROM_DATABASE=VMware, Inc.
ID_NET_NAME_PATH=enp2s2
ID_NET_NAME_SLOT=ens34
Unload module index
Unloaded link configuration context.
osakanataro@ubuntu:~$ cat /etc/systemd/network/98-ens34.link
[Match]
PermanentMACAddress=00:0c:29:53:f0:df

[Link]
AutoNegotiation=no
BitsPerSecond=100M
Duplex=full

osakanataro@ubuntu:~$

上記で「ens34: Policies didn’t yield a name and Name= is not given, not renaming.」というのが出ているが、これはLinkセクションでName=で定義していないための表示。

/etc/systemd/network/98-ens34.link のLinkセクションにNAME=ens34aと記載すると、再起動後のNIC名がens34a と指定したものになる。

また Matchセクションの「OriginalName=」についてだが、マニュアル にINTERACEを元にするとあるが、起動後に変更されてると名前が変わってると使えない、ともある。

とりあえず起動状態のINTERFACEを確認するには 「sudo udevadm test /sys/class/net/ens34」で確認出来る

osakanataro@ubuntu:~$ sudo udevadm test /sys/class/net/ens34
This program is for debugging only, it does not run any program
specified by a RUN key. It may show incorrect results, because
some values may be different, or not available at a simulation run.

Load module index
Parsed configuration file /usr/lib/systemd/network/99-default.link
Parsed configuration file /etc/systemd/network/98-ens34.link
Parsed configuration file /etc/systemd/network/98-ens224.link
Parsed configuration file /usr/lib/systemd/network/73-usb-net-by-mac.link
Created link configuration context.
Reading rules file: /usr/lib/udev/rules.d/01-md-raid-creating.rules
Reading rules file: /usr/lib/udev/rules.d/39-usbmuxd.rules
Reading rules file: /usr/lib/udev/rules.d/40-vm-hotadd.rules
Reading rules file: /usr/lib/udev/rules.d/50-apport.rules
Reading rules file: /usr/lib/udev/rules.d/50-firmware.rules
Reading rules file: /usr/lib/udev/rules.d/50-udev-default.rules
Reading rules file: /usr/lib/udev/rules.d/55-dm.rules
Reading rules file: /usr/lib/udev/rules.d/55-scsi-sg3_id.rules
Reading rules file: /usr/lib/udev/rules.d/56-dm-mpath.rules
Reading rules file: /usr/lib/udev/rules.d/56-dm-parts.rules
Reading rules file: /usr/lib/udev/rules.d/56-lvm.rules
Reading rules file: /usr/lib/udev/rules.d/58-scsi-sg3_symlink.rules
Reading rules file: /usr/lib/udev/rules.d/60-autosuspend-chromiumos.rules
Reading rules file: /usr/lib/udev/rules.d/60-block.rules
Reading rules file: /usr/lib/udev/rules.d/60-cdrom_id.rules
Reading rules file: /usr/lib/udev/rules.d/60-crda.rules
Reading rules file: /usr/lib/udev/rules.d/60-drm.rules
Reading rules file: /usr/lib/udev/rules.d/60-evdev.rules
Reading rules file: /usr/lib/udev/rules.d/60-fido-id.rules
Reading rules file: /usr/lib/udev/rules.d/60-input-id.rules
Reading rules file: /usr/lib/udev/rules.d/60-multipath.rules
Reading rules file: /usr/lib/udev/rules.d/60-open-vm-tools.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-alsa.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-input.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-storage-dm.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-storage-tape.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-storage.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-v4l.rules
Reading rules file: /usr/lib/udev/rules.d/60-sensor.rules
Reading rules file: /usr/lib/udev/rules.d/60-serial.rules
Reading rules file: /usr/lib/udev/rules.d/60-tpm-udev.rules
Reading rules file: /usr/lib/udev/rules.d/61-autosuspend-manual.rules
Reading rules file: /usr/lib/udev/rules.d/61-persistent-storage-android.rules
Reading rules file: /usr/lib/udev/rules.d/63-md-raid-arrays.rules
Reading rules file: /usr/lib/udev/rules.d/64-btrfs-dm.rules
Reading rules file: /usr/lib/udev/rules.d/64-btrfs.rules
Reading rules file: /usr/lib/udev/rules.d/64-md-raid-assembly.rules
Reading rules file: /usr/lib/udev/rules.d/66-azure-ephemeral.rules
Reading rules file: /usr/lib/udev/rules.d/66-snapd-autoimport.rules
Reading rules file: /usr/lib/udev/rules.d/68-del-part-nodes.rules
Reading rules file: /usr/lib/udev/rules.d/69-bcache.rules
Reading rules file: /usr/lib/udev/rules.d/69-lvm-metad.rules
Reading rules file: /usr/lib/udev/rules.d/69-md-clustered-confirm-device.rules
Reading rules file: /usr/lib/udev/rules.d/70-iscsi-disk.rules
Reading rules file: /usr/lib/udev/rules.d/70-iscsi-network-interface.rules
Reading rules file: /usr/lib/udev/rules.d/70-joystick.rules
Reading rules file: /usr/lib/udev/rules.d/70-mouse.rules
Reading rules file: /usr/lib/udev/rules.d/70-power-switch.rules
Reading rules file: /etc/udev/rules.d/70-snap.snapd.rules
Reading rules file: /usr/lib/udev/rules.d/70-touchpad.rules
Reading rules file: /usr/lib/udev/rules.d/70-uaccess.rules
Reading rules file: /usr/lib/udev/rules.d/71-power-switch-proliant.rules
Reading rules file: /usr/lib/udev/rules.d/71-seat.rules
Reading rules file: /usr/lib/udev/rules.d/73-seat-late.rules
Reading rules file: /usr/lib/udev/rules.d/73-special-net-names.rules
Reading rules file: /usr/lib/udev/rules.d/75-net-description.rules
Reading rules file: /usr/lib/udev/rules.d/75-probe_mtd.rules
Reading rules file: /usr/lib/udev/rules.d/78-graphics-card.rules
Reading rules file: /usr/lib/udev/rules.d/78-sound-card.rules
Reading rules file: /usr/lib/udev/rules.d/80-debian-compat.rules
Reading rules file: /usr/lib/udev/rules.d/80-drivers.rules
Reading rules file: /usr/lib/udev/rules.d/80-net-setup-link.rules
Reading rules file: /usr/lib/udev/rules.d/80-udisks2.rules
Reading rules file: /usr/lib/udev/rules.d/81-net-dhcp.rules
Reading rules file: /usr/lib/udev/rules.d/85-hdparm.rules
Reading rules file: /usr/lib/udev/rules.d/85-regulatory.rules
Reading rules file: /usr/lib/udev/rules.d/90-bolt.rules
Reading rules file: /usr/lib/udev/rules.d/90-console-setup.rules
Reading rules file: /usr/lib/udev/rules.d/90-fwupd-devices.rules
Reading rules file: /usr/lib/udev/rules.d/95-dm-notify.rules
Reading rules file: /usr/lib/udev/rules.d/95-kpartx.rules
Reading rules file: /usr/lib/udev/rules.d/95-upower-csr.rules
Reading rules file: /usr/lib/udev/rules.d/95-upower-hid.rules
Reading rules file: /usr/lib/udev/rules.d/95-upower-hidpp.rules
Reading rules file: /usr/lib/udev/rules.d/95-upower-wup.rules
Reading rules file: /usr/lib/udev/rules.d/96-e2scrub.rules
Reading rules file: /usr/lib/udev/rules.d/99-systemd.rules
Reading rules file: /usr/lib/udev/rules.d/99-vmware-scsi-udev.rules
Reading rules file: /etc/udev/rules.d/ubuntu--vg-ubuntu--lv.rules
Using default interface naming scheme 'v245'.
ethtool: autonegotiation is unset or enabled, the speed and duplex are not writable.
Could not set AlternativeName= or apply AlternativeNamesPolicy= on ens34, ignoring: Operation not supported
DEVPATH=/devices/pci0000:00/0000:00:11.0/0000:02:02.0/net/ens34
INTERFACE=ens34
IFINDEX=6
ACTION=add
SUBSYSTEM=net
ID_MM_CANDIDATE=1
ID_NET_NAMING_SCHEME=v245
ID_NET_NAME_MAC=enx000c2953f0df
ID_OUI_FROM_DATABASE=VMware, Inc.
ID_NET_NAME_PATH=enp2s2
ID_NET_NAME_SLOT=ens34
ID_BUS=pci
ID_VENDOR_ID=0x8086
ID_MODEL_ID=0x100f
ID_PCI_CLASS_FROM_DATABASE=Network controller
ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller
ID_VENDOR_FROM_DATABASE=Intel Corporation
ID_MODEL_FROM_DATABASE=82545EM Gigabit Ethernet Controller (Copper) (PRO/1000 MT Single Port Adapter)
ID_PATH=pci-0000:02:02.0
ID_PATH_TAG=pci-0000_02_02_0
ID_NET_DRIVER=e1000
ID_NET_LINK_FILE=/usr/lib/systemd/network/99-default.link
TAGS=:systemd:
SYSTEMD_ALIAS=/sys/subsystem/net/devices/ens34
USEC_INITIALIZED=2681966
run: '/lib/open-iscsi/net-interface-handler start'
run: '/lib/systemd/systemd-sysctl --prefix=/net/ipv4/conf/ens34 --prefix=/net/ipv4/neigh/ens34 --prefix=/net/ipv6/conf/ens34 --prefix=/net/ipv6/neigh/ens34'
Unload module index
Unloaded link configuration context.
osakanataro@ubuntu:~$

「INTERFACE=ens34」とはなっているが、OriginalName=ens34 と設定しても動作しなかったので、ダメなようだ。

MatchセクションでNIC特定に利用できたものは下記3つでした。
「PermanentMACAddress=」NICのMACアドレスで指定
  例: PermanentMACAddress=00:0c:29:9c:7e:0a

「Driver=」そのNICが使用するドライバ名で指定
  例: Driver=e1000

「Path=」そのNICの存在するPCIバスアドレスで指定
  例: Path=pci-0000:02:02.0

Path=で指定するパスは「sudo udevadm test /sys/class/net/ens34」の出力内にある「ID_PATH」の値を使用する

ONTAPで未接続のイーサポートを無効化する手法


NetApp ONTAPのWeb管理画面 ONTAP System Managerは、未使用でネットワークケーブルを接続していないポートがあると、オフラインになってるポートがあるよ、的な警告を表示する。

System Managerからだと簡単にネットワークポートの無効化が設定できる

無効化したいポートを選択して、「無効化」

続行します。

選択したポートのグラフィックが灰色に変化します。

さて、この操作、コマンドで行うにはどうすればいいのか?

まず、状況については「network port show」で確認出来ます。

fas8300::> network port show

Node: fas8300-01
                                                  Speed(Mbps) Health
Port      IPspace      Broadcast Domain Link MTU  Admin/Oper  Status
--------- ------------ ---------------- ---- ---- ----------- --------
a0a       Default      -                up   9000     -/-     healthy
a0a-1000  Default      Storage          up   9000     -/-     healthy
e0M       Default      Default          up   1500  auto/1000  healthy
e0c       Cluster      Cluster          up   9000 100000/100000 healthy
e0d       Cluster      Cluster          up   9000 100000/100000 healthy
e0e       Default      -                up   9000  auto/25000 healthy
e0f       Default      -                up   9000  auto/25000 healthy
e0g       Default      -                up   9000  auto/25000 healthy
e0h       Default      -                down 9000  auto/-     -

Node: fas8300-02
                                                  Speed(Mbps) Health
Port      IPspace      Broadcast Domain Link MTU  Admin/Oper  Status
--------- ------------ ---------------- ---- ---- ----------- --------
a0a       Default      -                up   9000     -/-     healthy
a0a-1000  Default      Storage          up   9000     -/-     healthy
e0M       Default      Default          up   1500  auto/1000  healthy
e0c       Cluster      Cluster          up   9000  auto/100000 healthy
e0d       Cluster      Cluster          up   9000  auto/100000 healthy
e0e       Default      -                up   9000  auto/25000 healthy
e0f       Default      -                up   9000  auto/25000 healthy
e0g       Default      -                up   9000  auto/25000 healthy
e0h       Default      -                up   9000  auto/25000 healthy
18 entries were displayed.

fas8300::>

しかし、network port modifyで指定できるオプションには、link up/downに関する設定がなさそう・・・

fas8300::> network port modify -node fas8300-01 -port e0h -?
  [ -mtu <integer> ]                                            MTU
  [ -autonegotiate-admin {true|false} ]                         Auto-Negotiation Administrative
  [ -duplex-admin {auto|half|full} ]                            Duplex Mode Administrative
  [ -speed-admin {auto|10|100|1000|10000|100000|40000|25000} ]  Speed Administrative
  [ -flowcontrol-admin {none|receive|send|full} ]               Flow Control Administrative
  [ -ipspace <IPspace> ]                                        IPspace Name

fas8300::>

マニュアルの「network port modify」を確認してみると下記の記述がある。

[-up-admin {true|false}] – Up Administrative (privilege: advanced)
The administrative state of the port. If set to true, the port is used if it is operational. If set to false, the port is configured down.

標準の管理CLIではなく、advanced以上の権限であれば実行できる、とのこと。

fas8300::> set advanced

Warning: These advanced commands are potentially dangerous; use them only when directed to do so by NetApp
         personnel.
Do you want to continue? {y|n}: y

fas8300::*>

advancedモードに切り替えてから、再度オプション一覧を確認

fas8300::*> network port modify -node fas8300-01 -port e0h -?
  [ -mtu <integer> ]                                            MTU
  [ -autonegotiate-admin {true|false} ]                         Auto-Negotiation Administrative
  [ -duplex-admin {auto|half|full} ]                            Duplex Mode Administrative
  [ -speed-admin {auto|10|100|1000|10000|100000|40000|25000} ]  Speed Administrative
  [ -flowcontrol-admin {none|receive|send|full} ]               Flow Control Administrative
  [ -up-admin {true|false} ]                                    *Up Administrative
  [ -ipspace <IPspace> ]                                        IPspace Name
  [ -ignore-health-status {true|false} ]                        *Ignore Port Health Status

fas8300::*>

設定出来る項目に現れました。

fas8300::*> network port modify -node fas8300-01 -port e0h -up-admin true

fas8300::*>

設定が反映されたかを確認します

fas8300::*> network port show

Node: fas8300-01
                                                                       Ignore
                                                  Speed(Mbps) Health   Health
Port      IPspace      Broadcast Domain Link MTU  Admin/Oper  Status   Status
--------- ------------ ---------------- ---- ---- ----------- -------- ------
a0a       Default      -                up   9000     -/-     healthy  false
a0a-1000  Default      Storage          up   9000     -/-     healthy  false
e0M       Default      Default          up   1500  auto/1000  healthy  false
e0c       Cluster      Cluster          up   9000 100000/100000 healthy false
e0d       Cluster      Cluster          up   9000 100000/100000 healthy false
e0e       Default      -                up   9000  auto/25000 healthy  false
e0f       Default      -                up   9000  auto/25000 healthy  false
e0g       Default      -                up   9000  auto/25000 healthy  false
e0h       Default      -                up   9000  auto/25000 healthy  false

Node: fas8300-02
                                                                       Ignore
                                                  Speed(Mbps) Health   Health
Port      IPspace      Broadcast Domain Link MTU  Admin/Oper  Status   Status
--------- ------------ ---------------- ---- ---- ----------- -------- ------
a0a       Default      -                up   9000     -/-     healthy  false
a0a-1000  Default      Storage          up   9000     -/-     healthy  false
e0M       Default      Default          up   1500  auto/1000  healthy  false
e0c       Cluster      Cluster          up   9000  auto/100000 healthy false
e0d       Cluster      Cluster          up   9000  auto/100000 healthy false
e0e       Default      -                up   9000  auto/25000 healthy  false
e0f       Default      -                up   9000  auto/25000 healthy  false
e0g       Default      -                up   9000  auto/25000 healthy  false
e0h       Default      -                up   9000  auto/25000 healthy  false
18 entries were displayed.

fas8300::*>

全てのポートがupになりました。

System Managerの方でも表示がupに戻ったかを確認できました。

Web GUIだと簡単に設定変更できるものが、コマンドだとadvanced権限必要だった、というのは驚きでした。

NetAppで電源電圧を確認する方法


NetAppを稼働させていたら電源電圧の警告が出ていたので、その確認手法を調べた。

ONTAP OS側からだと「system node environment sensors show」で現在値のみが確認出来た。

ただ、上記だと各部センサーの情報が全て含まれてしまうので、電源電圧だけを見るのであれば「system node environment sensors show -name *VIN*」と指定することで入力電圧のみを見ることが出来る。

fas8300::> system node environment sensors show -name *VIN*
Node Sensor                 State Value/Units Crit-Low Warn-Low Warn-Hi Crit-Hi
---- --------------------- ------ ----------- -------- -------- ------- -------
fas8300-01
     PSU1 VIN              normal
                                    99840 mV     90480    93600  261040  263120
     PSU2 VIN              normal
                                    94640 mV     90480    93600  261040  263120
fas8300-02
     PSU1 VIN              normal
                                    99840 mV     90480    93600  261040  263120
     PSU2 VIN              normal
                                    94640 mV     90480    93600  261040  263120
4 entries were displayed.

fas8300::>

「Value/Units」が現在値で、それ以外が注意/警告を発令する電圧設定となる。

これまでに電源電圧警報が発令された時に何Vだったのかを確認するには、Service Processor/BMC側にログインして調べる必要があった。

「system log sel」で表示されるIPMIログを見て確認する。

BMC fas8300-01> system log sel
   1 | 11/09/2021 | 09:38:39 | System Firmware Progress | Secondary CPU Initialization | Asserted
   2 | 11/09/2021 | 09:38:39 | System Firmware Progress | USB resource configuration | Asserted
   3 | 11/09/2021 | 09:38:41 | System Firmware Progress | PCI resource configuration | Asserted
   4 | 11/09/2021 | 09:38:41 | System Firmware Progress | Video initialization | Asserted
   5 | 11/09/2021 | 09:38:41 | System Firmware Progress | Keyboard controller initialization | Asserted
   6 | 11/09/2021 | 09:38:42 | System Firmware Progress | Hard-disk initialization | Asserted
   7 | 11/09/2021 | 09:38:50 | System Firmware Progress | Hard-disk initialization | Asserted
   8 | 11/09/2021 | 09:39:01 | System Event |  | Asserted
   9 | 11/09/2021 | 09:39:20 | Voltage #0x50 | Lower Non-critical going low
   a | 11/09/2021 | 09:39:24 | Voltage #0x5a | Lower Non-critical going low
   b | 11/09/2021 | 09:40:29 | Voltage #0x50 | Lower Non-critical going low
   c | 11/09/2021 | 09:40:29 | Voltage #0x5a | Lower Non-critical going low
   d | 11/09/2021 | 09:41:02 | System Event #0xff | Timestamp Clock Sync | Asserted
   e | 11/09/2021 | 09:41:02 | System Event #0xff | Timestamp Clock Sync | Asserted
   f | 11/09/2021 | 10:41:48 | Voltage #0x50 | Lower Non-critical going low
<略>
 b97 | 11/30/2021 | 23:45:25 | Voltage #0x5a | Lower Non-critical going low
 b98 | 11/30/2021 | 23:46:33 | Voltage #0x5a | Lower Non-critical going low
 b99 | 11/30/2021 | 23:46:46 | Voltage #0x5a | Lower Non-critical going low

BMC fas8300-01>

上記の「Voltage #0x50 | Lower Non-critical going low」というのが16進数表記の電圧となる。

0x50=80V、0x5a=90Vとなる。

さすがにAC 80Vは低すぎでしょ!!というわけで、電源経路確認が実施されましたとさ

ADAPTEX R90を使って他社用コントローラでPS4を動かす


PS4 Proを使って原神をやっているのだが、1年もやっているとDualshockの動作が怪しくなってきた。

そこで新しいコントローラを探してみたのだが、PS4用とうたって販売しているやつが怪しいものばかりなのに嫌気がさした。

1年前にPS5風のPS4コントローラなんてものを買ってみたりもしたのだが、1ヶ月ぐらいでボタンがおかしくなり使用不可に。それを考えると似たような価格帯のPS4用は期待できないな、というのもあった。

さて、そんな探している中で、BIGBIG WON RAINBOWという商品を発見した。

説明書きを読むと別売りの変換アダプター ADAPEX R90とセットにするとPS4でも使えるとのこと

なお、このメーカでは他にBluetooth接続の変換アダプターADAPEX R100ADAPTEX R100 Proというのも扱っている。

有線のR90にするか、無線のR100/R100 Proにするか悩んだのだが、無線だと他の機種につなげるつなげなおす時にペアリングをやりなおさないとならないのが面倒だなぁ、というのがあったので、今回はR90とRAINBOWコントローラをセットで購入してみた。

大阪の倉庫から1日で東京までお届け完了

中身はこんな感じでした。

長いmicroUSBケーブルが添付されていました。

さて、PS4に繋いで見ます。

PS4上のボタン動作は、純正DualShockのボタン配置に相当する場所にあるものがその動作をする、という感じでした。

ちなみに初期設定ではこんな感じで光ります。

光り方は背面中央にある「Fn」ボタンを2連続で押すとモードが変更され、何回かモード変更すると消灯モードに切り替わります。

しばらく原神で遊んで見ましたが、ちょっと重く感じる、というのと、コントローラにオーディオ出力っぽい端子があるけど動かない、という点以外は特に問題無く使用できています。

背面にあるマクロ登録可能なボタンについてはまだ使って見ていません。

さて、変換アダプターADAPTEX R90の対応表を見ると任天堂スイッチのProコンがサポート対象に入っています。

そんなわけで、PS4 ProにR90経由でProコンを接続してみました。

こちらもトクに問題なく動作していました。

ホームボタンはPSボタンとして動作していました。

なお、任天堂純正ではないスイッチ用コントローラやWindows汎用コントローラをつなげてみましたが、それらは無反応でした。

R90 firmwareのバージョンアップとかできないのかなぁ?

RAINBOWコントローラ自体はBluetooth接続が可能です。

専用アプリBIGBIG WONからfirmwareアップデートや光り方の制御が行えます。

Bluetooth接続するとアプリ内に「Rainbow」コントローラが登録されます。

「新築配置」から設定可能です。

まずは光り方の制御設定

ボタン感度や振動の強さ制御

また、ゲーム内設定でアナログジョイスティックの操作反転ができない場合にコントローラ側で対応できるような設定もあります。

また、firmwareアップデートに関する項目もあります。

今回届いたRAINBOWコントローラのfirmwareは4257のようです。

過去のバージョン一覧を見てみると2021/11/15付け3843から2週間で4257ってめっちゃバージョンアップしすぎでは?

まあ、更新をしっかりやってくれそうなのは安心な点ですね。

さて、しばらく使って見ますかね