FreeBSDでLinuxのbindマウントをする方法
nullfsを使ってマウントする。
/mnt/hdd/share
を/export/share
にマウントしたい場合は/etc/fstab
内に
/mnt/hdd/share /export/share nullfs rw 2 2
のように書いてマウントする。
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
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-linux
はzfs-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 On
をEnabled
に変更した。
ethtoolのインストール
WoL起動したいPCにethtoolをインストールする
- Ubuntu 18.04
$ sudo apt -y install ethtool
- CentOS 7
$ sudo yum -y install ethtool
- Arch Linux
$ 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-on
をgにする必要がある。
(すでに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クライアントをインストールする。
- Ubuntu 18.04
$ sudo apt -y install wakeonlan
- CentOS 7
$ sudo yum -y install net-tools
- Arch Linux
$ sudo pacman -S wol
起動テスト
Wake-on
がgになっている状態でシャットダウンし、別のPCからマジックパケットを送信する。
マジックパケットは起動したいPCのMACアドレスを使用して次のコマンドで送信できる。
- Ubuntu 18.04
$ wakeonlan d0:50:99:78:f8:a7
- CentOS 7
$ sudo ether-wake d0:50:99:78:f8:a7
- Arch Linux
$ 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