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

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

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

Debian Stretchインストール後の設定メモ

リポジトリの設定

リポジトリのリストからcdromを削除する。
sudoが使えないのでsuしてから作業する。

$ su

# sed -i -e 's/^deb cdrom/# deb cdrom/' /etc/apt/sources.list

一応アップデートしておく

# apt update
# apt -y upgrade

sudoの有効化

sudoのコマンドのインストール

$ su
# apt -y install sudo 

ユーザをsudoグループに追加し、sudoできるようにする。

# gpasswd -a ユーザ名 sudo

ログインし直すとsudoできるようになる。

IPの固定

staticに変更し、IPアドレス等を追加。

$ sudo vim /etc/network/interfaces
#iface eth0 inet dhcp
iface eth0 inet static
address         192.168.1.5
network         192.168.1.0
netmask         255.255.255.0
broadcast       192.168.1.255
gateway         192.168.1.1
dns-nameservers 192.168.1.1

$ sudo ifdown eth0 && sudo ifup eth0

Ubuntu18.04でソフトウェアRAIDを組む

Ubuntu18.04でmdadmソフトウェアRAIDを組んでデータストレージとして使う

構成

ディスクの確認

/dev/sdc~/dev/sdfまでのHDD4本でRAID10を作る。

$ sudo parted -l | grep /dev/sd
Disk /dev/sda: 2000GB
Disk /dev/sdb: 240GB
Disk /dev/sdc: 1000GB
Disk /dev/sdd: 1000GB
Disk /dev/sde: 1000GB
Disk /dev/sdf: 1000GB

ファイルシステムの作成

まずHDD4本に対してpartedでパーティションを作成する。
(参考: LinuxでHDDのパーティションテーブル作成とフォーマット方法
また、RAIDのフラグをオンにする。

$ sudo parted /dev/sdc
(parted) mklabel gpt Y
(parted) mkpart ext4 0% 100%
(parted) set 1 raid on

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

$ sudo mkfs -t ext4 /dev/sdc1

これを/dev/sdc~/dev/sdfの4本に対して実行。

RAIDアレイの構築

下記コマンドで、RAID10を4本のHDDで構築できる。
ファイルシステムを作成していないとそのHDDが出力に出力されない

$ sudo mdadm --create /dev/md0 --level=10 --raid-devices=4 /dev/sd[cdef]1
mdadm: /dev/sdc1 appears to contain an ext2fs file system
       size=976760832K  mtime=Thu Jan  1 00:00:00 1970
mdadm: /dev/sdd1 appears to contain an ext2fs file system
       size=976760832K  mtime=Tue Feb 26 06:19:05 2019
mdadm: /dev/sde1 appears to contain an ext2fs file system
       size=976760832K  mtime=Thu Jan  1 00:00:00 1970
mdadm: /dev/sdf1 appears to contain an ext2fs file system
       size=976760832K  mtime=Thu Jan  1 00:00:00 1970
Continue creating array? (y/n) y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

構築経過は下のコマンドで確認できる。3時間ちょっとかかりそう。

$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid10 sdf1[3] sde1[2] sdd1[1] sdc1[0]
      1953257472 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
      [>....................]  resync =  0.3% (5872256/1953257472) finish=197.5min speed=164280K/sec
      bitmap: 15/15 pages [60KB], 65536KB chunk

unused devices: <none>

mdadmを設定する

$ sudo bash -c  'mdadm -Es | grep md/0 >> /etc/mdadm/mdadm.conf'

RAIDアレイの初期化

RAIDアレイを確認する

$ sudo parted -l
Error: /dev/md0: unrecognised disk label
Model: Linux Software RAID Array (md)
Disk /dev/md0: 2000GB
Sector size (logical/physical): 512B/4096B
Partition Table: unknown
Disk Flags:

パーティションを作成(不要?)

$ sudo parted /dev/md0
(parted) mklabel gpt
(parted) mkpart ext4 0% 100%
(parted) quit

フォーマット

$ sudo mkfs -t ext4 /dev/md0
mke2fs 1.44.1 (24-Mar-2018)
Found a gpt partition table in /dev/md0
Proceed anyway? (y,N) y
Creating filesystem with 488314368 4k blocks and 122085376 inodes
Filesystem UUID: ac9462a0-e789-475e-86a6-55e4abb4ffc6
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
        102400000, 214990848

Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done

マウント(テスト)

$ sudo mount /dev/md0 /mnt

自動マウント

UUIDを確認

$ sudo blkid | grep /dev/md0
/dev/md0: UUID="ac9462a0-e789-475e-86a6-55e4abb4ffc6" TYPE="ext4"

/etc/fstabを編集

$ sudo vim /etc/fstab
UUID=ac9462a0-e789-475e-86a6-55e4abb4ffc6   /mnt    ext4    defaults,noatime    0 0

LinuxでUUIDでHDDをマウントする

UbuntuCentOS上でのUUID確認と/etc/fstabでの自動マウント方法

UUIDの確認

CentOS7でもUbuntu18.04でも、blkidの出力をgrepすればUUIDを確認できる。

$ sudo blkid | grep /dev/sdd1

CentOSの場合はUUID="..."の部分が必要

$ sudo blkid | grep /dev/sda1
/dev/sda1: UUID="eda3624c-15a5-4871-931e-5fbcaedcdfac" TYPE="ext4"

Ubuntuの場合はPARTUUID="..."の部分が必要

$ sudo blkid | grep /dev/sdd1
/dev/sdd1: PARTLABEL="ext4" PARTUUID="dd120623-d167-43d5-a372-ba77b4b4f15c"

コマンドでマウントする

UUID="..."PARTUUID="..."の部分をそのまま使用して

$ sudo mount -t ext4 UUID="..." /mnt

とか

$ sudo mount -t ext4 PARTUUID="..." /mnt

でマウントできる

自動マウント

自動マウントする場合は/etc/fstabにUUID="..."PARTUUID="..."の部分をそのまま使って書く。

$ sudo vim /etc/fstab
UUID="..."     /mnt/hdd    ext4    defaults    0 0
PARTUUID="..." /mnt/hdd    ext4    defaults    0 0