プログラミングとかLinuxとかの備忘録

プログラミング、Linuxでハマった箇所や環境構築のメモ

FreeBSDでのHDDのフォーマット・自動マウント方法

FreeBSD 12.1-RELEASEでHDDのフォーマットから自動マウントまで

フォーマットしたいHDDを探す

今回はda4に接続されているTOSHIBAの12TBのHDDをフォーマットする

$ dmesg | grep da | grep ATA
...
da4: <ATA TOSHIBA MG07ACA1 4304> Fixed Direct Access SPC-4 SCSI device
...

HDDのフォーマット(UFS)

GPTパーティションテーブルを作成する

$ sudo gpart create -s GPT da4

下のコマンドで作成を確認する

$ gpart show da4
=>         40  23437770672  da4  GPT  (11T)
           40  23437770672       - free -  (11T)

古いHDDを使いまわしていて

gpart: geom 'da4': File exists

などが出る場合は

$ sudo gpart destroy -F da4

パーティションを消去した後に上のパーティション作成を行う。

UFS用のパーティションを作成

1M境界(-a 1M)を設定しておかないと性能が出ないらしい。

$ sudo gpart add -t freebsd-ufs -a 1M da4
da4p1 added

確認してみる

$ gpart show da4
=>         40  23437770672  da4  GPT  (11T)
           40         2008       - free -  (1.0M)
         2048  23437766656    1  freebsd-ufs  (11T)
  23437768704         2008       - free -  (1.0M)

ファイルシステムを作成する

$ sudo newfs -U /dev/da4p1

大量に数値が流れるのをしばらく待つ。

HDDのマウント

まずは手動でマウントしてみる

$ sudo mkdir /mnt/hdd
$ sudo mount /dev/da4p1 /mnt/hdd
$ df
Filesystem      1K-blocks        Used       Avail Capacity  Mounted on
/dev/ada0p2     469020432     3204752   428294048     1%    /
devfs                   1           1           0   100%    /dev
/dev/da4p1    11350963232           8 10442886168     0%    /mnt/hdd

自動マウント

/etc/fstabを編集する

$ sudo vim /etc/fstab
/dev/da4p1       /mnt/hdd    ufs    rw    2 2

問題無くマウントできるか確認

$ sudo mount -a

自動マウント(UUIDを使用)

$ gpart list

の出力で自分のマウントしたいパーティション(da4p1)からrawuuidを探す。 今回の場合はa5fed6e5-f0cf-11ea-a70d-a0369f210774

Geom name: da4
modified: false
state: OK
fwheads: 255
fwsectors: 63
last: 23437770711
first: 40
entries: 128
scheme: GPT
Providers:
1. Name: da4p1
   Mediasize: 12000136527872 (11T)
   Sectorsize: 512
   Stripesize: 4096
   Stripeoffset: 0
   Mode: r1w1e1
   efimedia: HD(1,GPT,a5fed6e5-f0cf-11ea-a70d-a0369f210774,0x800,0x574fff000)
   rawuuid: a5fed6e5-f0cf-11ea-a70d-a0369f210774
...

/etc/fstabを編集する。

$ sudo vim /etc/fstab
/dev/gptid/a5fed6e5-f0cf-11ea-a70d-a0369f210774       /mnt/hdd    ufs    rw    2 2

参考ページ

Arch LinuxでRadeon RX5500XT(Navi14)をいい感じに動かす設定

i7-6700k + Arch Linuxで動かしていた環境にSapphire Pulse Radeon RX5500XTを導入した後にゲーム等でGPUに負荷がかかると画面が砂嵐?みたいになってフリーズする現象への対応策とか。

Dynamic Power Managementの無効化

フリーズする根本的な原因はDPMのせいらしいです。
https://wiki.archlinux.org/index.php/AMDGPU#System_freeze_or_crash_when_gaming_on_Vega_cards

ArchWikiの通りにカーネルパラメータにradeon.dpm=0を追加して再起動すると無効化できる

$ sudo vim /boot/loader/entries/arch.conf
title   Arch Linux
linux   /vmlinuz-linux
initrd  /initramfs-linux.img
options root=PARTUUID=0bd23e2f-d30b-45d1-8ded-8026f596513e rw intel_iommu=on radeon.dpm=0

radeontopが正しく動作しない

こんな感じでGPU使用率とかが見れない

$ sudo radeontop
Failed to open DRM node, no VRAM support.
Unknown Radeon card. <= R500 won't work, new cards might.

最新版のradeontop(1:1.0.r6.g07ec134-1)に入れ替えれば見れる様になった

$ yay -R radeontop
$ yay -S radeontop-git

Ubuntu20.04でi386のパッケージをインストールする方法

CUI環境でGUIソフトを動かすのにlibxtst6:i386とかをインストールしようとしてできなかったのでメモ

i386の有効化

$ sudo dpkg --add-architecture i386
$ sudo apt update

これだけでできる

使い方(例)

$ sudo apt install -y libxtst6:i386

zfs-on-linuxでzfsを試す

ハードウェア

  • CPU: i7-6700k
  • RAM: 16GB
  • HDD: TOSHIBA DT01ACA300 (3TB)

ディスクIO性能ベンチマーク

fioのインストール

$ sudo pacman -S fio

LinuxでもCrystalDiskMarkぽいディスクベンチマークしたい」のfio設定ファイルを若干改変したもを作成(benchmark.fio)してベンチマークする

[global]
ioengine=libaio
iodepth=1
size=3g
direct=1
runtime=10
directory=/mnt/hdd
stonewall

[Seq-Read]
bs=1m
rw=read

[Seq-Write]
bs=1m
rw=write

[Rand-Read-4K]
bs=4k
rw=randread

[Rand-Write-4K]
bs=4k
rw=randwrite

[Rand-Read-4K-QD32]
iodepth=32
bs=4k
rw=randread

[Rand-Write-4K-QD32]
iodepth=32
bs=4k
rw=randwrite

ベンチマークの実行は下のコマンド

$ sudo fio benchmark.fio

ext4

フォーマット&マウント

$ sudo mkfs -t ext4 /dev/sda1
$ sudo mount /dev/sda1 /mnt/hdd

ベンチマーク結果

   READ: bw=174MiB/s (183MB/s), 174MiB/s-174MiB/s (183MB/s-183MB/s), io=1743MiB (1828MB), run=10005-10005msec
  WRITE: bw=154MiB/s (161MB/s), 154MiB/s-154MiB/s (161MB/s-161MB/s), io=1540MiB (1615MB), run=10005-10005msec

   READ: bw=592KiB/s (606kB/s), 592KiB/s-592KiB/s (606kB/s-606kB/s), io=5920KiB (6062kB), run=10004-10004msec
  WRITE: bw=1450KiB/s (1485kB/s), 1450KiB/s-1450KiB/s (1485kB/s-1485kB/s), io=14.3MiB (15.0MB), run=10119-10119msec

   READ: bw=1505KiB/s (1541kB/s), 1505KiB/s-1505KiB/s (1541kB/s-1541kB/s), io=14.9MiB (15.6MB), run=10129-10129msec
  WRITE: bw=1531KiB/s (1567kB/s), 1531KiB/s-1531KiB/s (1567kB/s-1567kB/s), io=15.1MiB (15.8MB), run=10074-10074msec

zfs

インストール

$ yay -S zfs-linux
==> Error: Could not find all required packages:
    zfs-utils=0.8.3 (Wanted by: zfs-linux)

zfs-linuxzfs-utilsのバージョンが追いついていなかったのでzfs-linux-gitで試す。

$ yay -S zfs-linux-git

partedでext4用に作成したパーティションを削除後に下記を実行

$ ls -lh /dev/disk/by-id/ | grep sda
lrwxrwxrwx 1 root root  9  1月 26 16:58 ata-TOSHIBA_DT01ACA300_Z3FGRANGS -> ../../sda
lrwxrwxrwx 1 root root  9  1月 26 16:58 wwn-0x5000039ff4d4c893 -> ../../sda

ZFSプールの作成

$ sudo zpool create -m /mnt/hdd tank ata-TOSHIBA_DT01ACA300_Z3FGRANGS

$ zpool list
NAME   SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
tank  2.72T   596K  2.72T        -         -     0%     0%  1.00x    ONLINE  -

$ df -h | grep tank
tank             2.7T  128K  2.7T    1% /mnt/hdd

ベンチマーク

$ sudo fio benchmark.fio

結果

   READ: bw=112MiB/s (118MB/s), 112MiB/s-112MiB/s (118MB/s-118MB/s), io=1124MiB (1179MB), run=10002-10002msec
  WRITE: bw=290MiB/s (304MB/s), 290MiB/s-290MiB/s (304MB/s-304MB/s), io=2902MiB (3043MB), run=10001-10001msec

   READ: bw=134KiB/s (137kB/s), 134KiB/s-134KiB/s (137kB/s-137kB/s), io=1340KiB (1372kB), run=10001-10001msec
  WRITE: bw=11.1MiB/s (11.7MB/s), 11.1MiB/s-11.1MiB/s (11.7MB/s-11.7MB/s), io=111MiB (117MB), run=10001-10001msec

   READ: bw=168KiB/s (172kB/s), 168KiB/s-168KiB/s (172kB/s-172kB/s), io=1684KiB (1724kB), run=10002-10002msec
  WRITE: bw=11.4MiB/s (11.9MB/s), 11.4MiB/s-11.4MiB/s (11.9MB/s-11.9MB/s), io=114MiB (119MB), run=10001-10001msec

結果まとめ

Readがext4の方が早いのはzfsのキャッシュが効いてないから?

ext4 zfs
Seq-Read 183MB/s 118MB/s
Seq-Write 161MB/s 304MB/s
Rand-Read-4K 606kB/s 137kB/s
Rand-Write-4K 1485kB/s 11.7MB/s
Rand-Read-4K-QD32 1541kB/s 172kB/s
Rand-Write-4K-QD32 1567kB/s 11.9MB/s

LinuxでWake-on-LANする

UEFIでWake-on-Lanを有効化する

手元のASRockのマザーボードでは Advanced -> ACPI Configuration -> PCIE Devices Power OnEnabledに変更した。

ethtoolのインストール

WoL起動したいPCにethtoolをインストールする

$ sudo apt -y install ethtool
$ sudo yum -y install ethtool
$ sudo pacman -S ethtool

WoLの有効化

WoLを設定したいネットワークデバイス名をip link show等で確認する。

$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp0s31f6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether d0:50:99:78:f8:a7 brd ff:ff:ff:ff:ff:ff

WoLの設定を確認する。
Supports Wake-onの中にgが入っているためWake-on-LANに対応している。

$ sudo ethtool enp0s31f6 | grep Wake-on
        Supports Wake-on: pumbg
        Wake-on: d

ここで、WoLを使用するためにはWake-ongにする必要がある。 (すでにgになっている場合は、後の設定は不要のはず)

$ sudo ethtool -s enp0s31f6 wol g
$ $ sudo ethtool enp0s31f6 | grep Wake-on
        Supports Wake-on: pumbg
        Wake-on: g

また、再起動後すると設定が戻ってしまうためcronを用いて再起動ごとに設定を行うようにする。

$ sudo crontab -e -u root
@reboot         /usr/bin/ethtool -s enp0s31f6 wol g

ここまででサーバ側の設定は終了。

WoLクライアントのインストール

マジックパケットを送信する側のPCにWoLクライアントをインストールする。

$ sudo apt -y install wakeonlan
$ sudo yum -y install net-tools
$ sudo pacman -S wol

起動テスト

Wake-ongになっている状態でシャットダウンし、別のPCからマジックパケットを送信する。 マジックパケットは起動したいPCのMACアドレスを使用して次のコマンドで送信できる。

$ wakeonlan d0:50:99:78:f8:a7
$ sudo ether-wake d0:50:99:78:f8:a7
$ sudo wol d0:50:99:78:f8:a7

Debian9へdockerリポジトリを追加し最新のDocker環境を構築する

dockerのインストール

Get Docker CE for Debian | Docker Documentationのとおり、リポジトリを追加してインストールする。

$ sudo apt update
$ sudo apt -y install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg2 \
    software-properties-common

$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
OK

$ sudo apt-key fingerprint 0EBFCD88
pub   rsa4096 2017-02-22 [SCEA]
      9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid           [ unknown] Docker Release (CE deb) <docker@docker.com>
sub   rsa4096 2017-02-22 [S]

$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/debian \
   $(lsb_release -cs) \
   stable"

$ sudo apt update
$ sudo apt -y install docker-ce docker-ce-cli containerd.io

docker-composeのインストール

リポジトリがなさそうなので直接インストールする。

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

いろいろと設定

ユーザをdockerグループに追加し、dockerデーモンを自動起動するように設定する。

$ sudo gpasswd -a vild124 docker
Adding user vild124 to group docker

$ sudo systemctl enable docker
$ sudo reboot