Fujitsu製サーバー TX1320 M4にUbuntu 20.04.1を導入した時のメモ

# はじめに

格安サーバーというほど安くはありませんが、Xeon E2234を搭載したTX1320 M4を数台入手したので、AutoInstallでUbuntu 20.04.1を導入した時のメモを残します。K8sクラスターを構築する目的なので、AutoInstall+Ansibleを利用して最低限の構成は合わせたいと思っています。

これまで準備してきた環境がPreseedに最適化されていて満足していたので、20.04からAutoInstallを採用するのにはまだ難しさがあるように感じています。

# 基本スペック

ベースモデルとなる、DVDドライブ付き、8GBメモリ、HDDレスという構成で、HDDを装着するためのネジ、ケーブルなどはケース内に配線されていました。M.2 SSDを固定するためのネジは添付されておらず、手持ちのネジ(M2 3mm 皿ネジ)を利用しています。

3.5inch HDDを2台つけられるモデルなので、SATAケーブルは2つ配線されています。

* /dev/sda - 内蔵HDD Slot#1 (SATA, 4TB HGST HDN726040AL)
* /dev/sdb - 内蔵HDD Slot#2 (SATA, 4TB HGST HDN726040AL)
* /dev/sdc - 内蔵M.2 SSD Slot#1 (SATA, 512GB WDC WDS500G1R0B)

OSをインストールしたいSSDはHDDが1台の場合は、M.2 SSDが /dev/sdb と認識される点が、少し気をつけるところかなと思われます。後からHDDを追加して起動ドライブが/dev/sdbから/dev/sdcに変更になっても、UEFIはEFIパーティションを認識し、GRUB(ブートローダー),/etc/fstab(OS)ではUUIDで認識されるので起動しないといった問題は発生しないはずです。

```bash:/proc/cpuinfoの内容
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 158
model name      : Intel(R) Xeon(R) E-2234 CPU @ 3.60GHz
stepping        : 10
microcode       : 0xde
cpu MHz         : 814.865
cache size      : 8192 KB
physical id     : 0
siblings        : 4
core id         : 0
cpu cores       : 4
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 22
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx
 fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl 
xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16
 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dn
owprefetch cpuid_fault epb invpcid_single pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_a
d fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt intel_pt xsaveop
t xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp md_clear flush_l1d
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs taa itlb_multihit srbds
bogomips        : 7200.00
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:
...
```

E-2234 CPUはpassmarkで9000台のスコアを持ち、SATAとはいえSSDを起動ドライブにしているので、全体的なパフォーマンスには期待ができそうです。

# 基本操作

* F2キー - UEFIメニュー (最初にSATAメニューでRAIDからAHCIモードに変更)
* F12キー - Bootデバイスを選択

操作についてはUSBキーボードを接続して、キーを連打した場合には、他のサーバーと同じように操作しても、キーの押下が認識されない場合があったので、F2, F12キーについてはAmerican Megatrendsのロゴが表示されるまで、押し続けています。

# Ubuntuのインストール方法

基本はUbuntu 20.04.1のAutoInstallを利用する方法を利用しています。

* [Ubuntu 20.04をAutoInstallで自動インストールしてみた](https://qiita.com/YasuhiroABE/items/637f1046a15938f9d3e9)

## 自動化の前に手動でのインストール

参考となるuser-dataを取得するため、通常の ubuntu-20.04.1-live-server-amd64.iso を利用してインストールしています。

/var/log/installer/のログは次のようになりました。

```yaml:/var/log/installer/autoinstall-user-data 
#cloud-config
autoinstall:
  apt:
    geoip: true
    preserve_sources_list: false
    primary:
    - arches: [amd64, i386]
      uri: http://jp.archive.ubuntu.com/ubuntu
    - arches: [default]
      uri: http://ports.ubuntu.com/ubuntu-ports
  identity: {hostname: xxxxxxxx, password: xxxxxxxx,
    realname: xxxxxxxx, username: xxxxxxxx}
  keyboard: {layout: us, toggle: null, variant: ''}
  locale: en_US
  network:
    ethernets:
      eno2: {dhcp4: true}
    version: 2
  ssh:
    allow-pw: true
    authorized-keys: []
    install-server: true
  storage:
    config:
    - {ptable: gpt, serial: WDC_WDS500G1R0B-68A4Z0_2005B5801482, wwn: '0x5001b448b1d75b60',
      path: /dev/sdc, wipe: superblock-recursive, preserve: false, name: '', grub_device: false,
      type: disk, id: disk-sdc}
    - {device: disk-sdc, size: 536870912, wipe: superblock, flag: boot, number: 1,
      preserve: false, grub_device: true, type: partition, id: partition-0}
    - {fstype: fat32, volume: partition-0, preserve: false, type: format, id: format-0}
    - {device: disk-sdc, size: 499568869376, wipe: superblock, flag: '', number: 2,
      preserve: false, type: partition, id: partition-1}
    - {fstype: ext4, volume: partition-1, preserve: false, type: format, id: format-1}
    - {device: format-1, path: /, type: mount, id: mount-1}
    - {device: format-0, path: /boot/efi, type: mount, id: mount-0}
  version: 1
```

この情報を元に、AutoInstall用の user-data ファイルを作成していきます。
以前にも利用した作業用リポジトリをforkしてTX1320 M4向けにuser-dataを作成しました。

利用しているuser-dataは一部の情報をマスクしていますが、次のようになっています。

```yaml:user-data
#cloud-config
autoinstall:
  version: 1
  identity:
    hostname: tx1320m4
    password: "$B6xxxxxxxxxxxxxxxxxxxxxx"
    username: xxxxxxx
  shutdown: poweroff
  early-commands:
    - dd if=/dev/zero of=/dev/sda bs=512 count=34
    - dd if=/dev/zero of=/dev/sdb bs=512 count=34
    - dd if=/dev/zero of=/dev/sdc bs=512 count=34
  storage:
    swap:
      size: 0
    grub:
      install_devices:
        - partition-0
    config:
      - id: disk-sdc
        type: disk
        ptable: gpt
        path: /dev/sdc
        wipe: superblock-recursive
        preserve: False
        name: ''
        grub_device: False
      - id: partition-0
        type: partition
        size: 536870912
        number: 1
        device: disk-sdc
        wipe: superblock
        flag: boot
        preserve: False
        grub_device: True
      - id: format-0
        fstype: fat32
        volume: partition-0
        preserve: False
        type: format
      - id: partition-1
        type: partition
        size: -1
        number: 2
        device: disk-sdc
        wipe: superblock
        flag: ""
        preserve: False
      - id: format-1
        fstype: ext4
        volume: partition-1
        preserve: False
        type: format
      - id: format-1-root
        type: mount
        path: /
        device: format-1
        options: 'noatime,errors=remount-ro'
      - id: format-0-boot
        type: mount
        path: /boot/efi
        device: format-0
        options: 'defaults'
  ssh:
    install-server: true
    allow-pw: false
    authorized-keys:
      - "ssh-ed25519 AAAAC3xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsr7wu9s for ansible"
```

# TX1320 M4固有の課題

作業中に気になった点や遭遇した課題についてメモしていきます。

## USBメモリを接続したまま再起動すると、再びインストールプロセスが開始される場合がある

自動インストール後にUSBメモリを抜かないと、再び自動でインストールプロセスが開始されてしまう場合があります。
DVDメディアを使えば物理的にディスクが排出されるので、再起動してもインストールプロセスが開始されることはありませんが、USBメモリを使った場合には、このような現象が発生する可能性があります。

箱から取り出し、以下のような手順でインストールした場合には、少なくとも1回は再現しませんでした。

* 電源を入れ、F2キーでUEFIに移動し、F3キーからLoad Optimized Defaultsを実行する (SATAがAHCIモードに変更される)
* UEFIを保存し抜けると、Fujitsuロゴが表示され、F12キーから起動デバイスの選択画面を表示し、先頭のUEFI OS(USBメモリ)を選択する (F12キーを押さないと画面が黒いまま電源が入り続ける。この状態になったら電源ボタンを軽く押し、電源を落とす。そして再び電源を入れ、Fujitsuロゴ画面でF12キーを押し続けること)
* インストーラーが自動的に再起動し、放置すると画面が黒くなったまま、電源が入った状態で停止する。

この段階でUSBメモリを取り外さずに、F12キーから"ubuntu"を選択した状態で、efibootmgrコマンドの出力を確認すると次のようになりました。

```bash
$ sudo efibootmgr -v
BootCurrent: 0000
Timeout: 1 seconds
BootOrder: 0001,0000,0002,0003,0004,0005,0006
Boot0000* ubuntu        HD(1,GPT,5248bf34-5aea-49fd-a909-57394b535323,0x800,0x100000)/File(\EFI\UBUNTU\SHIMX64
.EFI)
Boot0001* UEFI OS       HD(2,MBR,0x4cd3d19f,0x208,0x1f00)/File(\EFI\BOOT\BOOTX64.EFI)..BO
Boot0002* UEFI: PXE IP4 Intel(R) I210 Gigabit  Network Connection       PciRoot(0x0)/Pci(0x1c,0x1)/Pci(0x0,0x0
)/MAC(4c52625c645f,1)/IPv4(0.0.0.00.0.0.0,0,0)..BO
Boot0003* UEFI: PXE IP6 Intel(R) I210 Gigabit  Network Connection       PciRoot(0x0)/Pci(0x1c,0x1)/Pci(0x0,0x0
)/MAC(4c52625c645f,1)/IPv6([::]:<->[::]:,0,0)..BO
Boot0004* UEFI: PXE IP4 Intel(R) I210 Gigabit  Network Connection       PciRoot(0x0)/Pci(0x1c,0x3)/Pci(0x0,0x0
)/MAC(4c52625c6460,1)/IPv4(0.0.0.00.0.0.0,0,0)..BO
Boot0005* UEFI: PXE IP6 Intel(R) I210 Gigabit  Network Connection       PciRoot(0x0)/Pci(0x1c,0x3)/Pci(0x0,0x0
)/MAC(4c52625c6460,1)/IPv6([::]:<->[::]:,0,0)..BO
Boot0006* UEFI: I-O DATAUSB Flash Disk 1100     PciRoot(0x0)/Pci(0x14,0x0)/USB(19,0)/CDROM(1,0x208,0x7c00)..BO
```
この状態では問題は発生せず、shutdown -h nowで停止し、USBメモリを外し、電源を入れたところ自動的にSSDからubuntuが起動しています。

原因がAutoInstall側にあるのか、前提となるUEFIの状態やuser-dataの設定に依るものかは分かっていません。

:::note
この問題はAutoInstall側のuser-dataでOS導入後にshutdownすることで解決しています。
この変更は前述のuser-dataの中に含まれています。
:::

## デフォルトのSATA設定が、RAIDモードである点

前述のとおり、まず利用を開始する前に、UEFIからF3キーを押し、Optimized Defaultsを適用しています。
これでAHCIモードに切り替わるようですが、SATAコントローラの設定を確認しています。

## USBメモリからブートしない & 起動デバイスリストが表示されない

F2, F12キーについて書いたセクションにも書いていますが、キーを連打した場合の認識率は非常に低く、私の環境では押下し続ける必要がありました。

また、OSからshutdown -r nowで再起動した場合には起動時のFujitsuロゴが2回表示されます(一度ロゴが表示されてから電源が落ち、また入る)。

初期化処理を確実にするためなのだと思いますが、F2, F12キーは2回目のFujitsuロゴが表示されている時に押下しなければいけないので、最初に画面が切り替わって安心していると期待した動作をせず戸惑うと思います。

American Megatrendsのロゴが表示されるまでは、F2, F12キーは押し続けましょう。

## SATAケーブルの配線に注意が必要

ケースを開けると未接続分のSATAケーブルがDVDドライブから伸びているSATAケーブルの下敷になっていて、M.2 SSDと干渉するかと思い、SATAの上を通したのですが、ケースを閉じる際に干渉する可能性のあることが分かりました。もう少しで断線させてしまうところでした。

再びDVDドライブからのSATAケーブルをマザーボードのコネクタから外し、HDDと接続するSATAケーブルを下に通して、再びDVDドライブのSATAケーブルをマザーボードに接続しました。

気をつけるべき点はあるものの、富士通のHalf Heightなコンパクト筐体は、TX120 S3の経験しかないので、HDDの取り付けや配線は劇的に改善されていると感動しました。

## 起動ドライブのサイズが違う場合には利用が難しい

サーバーによって、ドライブ数、MBR(BIOS)/GPT(UEFI)の違いなどの特徴が異なるので、タイプによって複数のISOイメージを作成する必要があります。

もしディスクサイズだけが問題であれば、あらかじめ十分かつ最小限のサイズでpartition-1を準備して、後から拡張する方法もあります。

今回利用した user-data のパーティションサイズを半分の 249784434688 にしたISOイメージを作成し、これを拡張する方法は次のようになります。

### Step#1. パーティションの拡張

```bash:起動後にpartitionを拡張する
$ sudo parted /dev/sdc
(parted) print                                                            
Model: ATA WDC WDS500G1R0B (scsi)
Disk /dev/sdc: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End    Size   File system  Name  Flags
 1      1049kB  538MB  537MB  fat32              boot, esp
 2      538MB   250GB  250GB  ext4

(parted) resizepart 2
Warning: Partition /dev/sdc2 is being used. Are you sure you want to continue?
Yes/No? Yes                                                               
End?  [250GB]? 500GB                                                      
(parted) print                                                            
Model: ATA WDC WDS500G1R0B (scsi)
Disk /dev/sdc: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End    Size   File system  Name  Flags
 1      1049kB  538MB  537MB  fat32              boot, esp
 2      538MB   500GB  499GB  ext4
```

### Step#2. ファイルシステムの拡張

```bash:ファイルシステムの拡張方法
## パーティションを拡張したが、ファイルシステムは拡張されていない
$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
...
/dev/sdc2      239051404 2473928 224364588   2% /
...

## ext4の場合
$ sudo resize2fs /dev/sdc2 
resize2fs 1.45.5 (07-Jan-2020)
Filesystem at /dev/sdc2 is mounted on /; on-line resizing required
old_desc_blocks = 30, new_desc_blocks = 59
The filesystem on /dev/sdc2 is now 121938984 (4k) blocks long.

## 倍のサイズになっていることを確認
$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
...
/dev/sdc2      479050608 2484128 454605840   1% /
...
```

この方法で比較的汎用的なISOイメージは作成可能ですが、搭載するドライブ数によってデバイスの指定(/dev/sd*)が変化する点には注意が必要そうです。

:::note
最新のcurtinでは最後に指定するpartitionのsize値に-1を指定することで残りの最大サイズが指定できます。
:::

## HDDの劣化について

最初に利用していたHDDはHGSTのDeskstar NASシリーズの4TBドライブでした。

これはKubernetesのrook-ceph用のbluestoreとして利用していますが、3年ほど経過した時点から故障する現象に遭遇しています。

症状としては突然認識されなくなるというもので、同時に発生しない限りはrook-cephの冗長性によって問題なく対応できています。

これは筐体の狭さからくる熱による劣化というよりは、用途そのものがドライブの基本性能と合っていなかったのだと反省しています。現在はSeagateのExosシリーズかWD GoldシリーズのニアラインHDDを利用するようにしています。

他のk8sクラスターで稼動しているものを含めてニアラインクラスのHDDを利用しているところで問題は発生していません。

以上