DeskPi Proセットアップ

やること

  • 一度SDカードにRaspberry Pi OSを入れて起動(パーティション編集&USB起動設定用)
  • USBから起動する設定
  • USB接続したSSDにOSインストール
  • メモリ4GBしかないのでSwapに8GB割り当てる

SDカードにOSを入れて起動

Raspberry Pi OSのイメージをダウンロード www.raspberrypi.com ダウンロードしたイメージを解凍してddでSDカードに書き込み

sudo dd bs=4M if=<イメージファイル> of=/dev/sd* status=progress conv=fsync

OSアップデート&DeskPiセットアップ

起動出来たらアップデートを実行して再起動

sudo apt update
sudo apt upgrade

再起動したらDeskPiのインストールスクリプトを実行する。 wiki.deskpi.com スクリプトがエラーになるのでWikiの手順を実行する前にgccをインストールする。

sudo apt install gcc 
cd ~
git clone https://github.com/DeskPi-Team/deskpi.git
cd ~/deskpi/
chmod +x install.sh
sudo ./install.sh

インストール出来たら再起動。

USB SSDから起動する設定

wiki.deskpi.com DeskPiのWikiに記載されている手順でUSB SSDから起動する設定をする。 起動したら設定ツールを起動

sudo raspi-config

Advanced OptionsのBoot OrderでUSB Bootを選択 Boot Loader VersionでLatest Versionを選択 保存したら再起動して以下を実行

sudo -E rpi-eeprom-config --edit

何も変更しないでCtrl+Xで抜ける

SSDにOSインストール

Ubuntuのイメージを落としてきてSSDに書き込み ubuntu.com

sudo dd bs=4M if=<イメージファイル> of=/dev/sd* status=progress conv=fsync

SDカードを抜いて起動してSSDに入れたUbuntuで起動することを確認する。 起動出来たらシャットダウンしてSSDを抜いて、SDカードに入れたOSを起動。 480GBのSSDを以下のように使いたいので、GPartedを使用してパーティションをリサイズしていく。/dev/sda1は/boot/firemwareで使われているのでsda2以降を編集する。

/dev/sda2  32GB /以下用
/dev/sda3  8GB   Swap用
/dev/sda4  残り  その他

終わったらシャットダウンしてSDを抜いてSSDで起動 完成すると以下のような感じ

Disk /dev/sda: 447.13 GiB, 480103981056 bytes, 937703088 sectors
Disk model: 480CG3VX
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 33553920 bytes
Disklabel type: dos
Disk identifier: 0xdeca7dfc

Device     Boot    Start       End   Sectors   Size Id Type
/dev/sda1  *        2048    526335    524288   256M  c W95 FAT32 (LBA)
/dev/sda2         526336  67635199  67108864    32G 83 Linux
/dev/sda3       67635200  84412415  16777216     8G 83 Linux
/dev/sda4       84412416 937701375 853288960 406.9G 83 Linux
ubuntu@ubuntu:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           380M  3.0M  377M   1% /run
/dev/sda2        32G  3.4G   27G  12% /
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
/dev/sda1       253M  103M  150M  41% /boot/firmware
tmpfs           380M  4.0K  380M   1% /run/user/1000

Swap作成

Swapを作成

ubuntu@ubuntu:~$ sudo mkswap /dev/sda3
Setting up swapspace version 1, size = 8 GiB (8589930496 bytes)
no label, UUID=cb0d5595-6359-4ad1-add8-9bd58e6a1a65
ubuntu@ubuntu:~$ sudo swapon /dev/sda3
ubuntu@ubuntu:~$ free -m
               total        used        free      shared  buff/cache   available
Mem:            3790         211        3172           3         405        3414
Swap:           8191           0        8191

fstabに追加しておく

sudo vi /etc/fstab
/dev/sda3           swap        swap    defaults        0    0

モジュール追加

sudo apt install linux-modules-extra-raspi

Ubuntu21.10でKVMのbridge作成

KVMVMが利用するbridgeネットワークを作成する。OSはUbuntu21.10を使用。

bridgeを作成する

netplanを利用するので設定を記述するyamlファイルを作成する。IPアドレスルーター側で固定しているのでdhcpはyesで作成する。

vi /etc/netplan/99_config.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    enp9s0:
      dhcp4: yes
  bridges:
    br0:
      dhcp4: yes
      interfaces:
        - enp9s0

設定を反映する。nmcliでコマンドを色々うつよりyamlに設定を書いてapplyするだけのnetplanのほうが楽。

hoge@hoge-desktop:~$ sudo netplan apply

hoge@hoge-desktop:~$ nmcli c s
NAME    UUID                                  TYPE      DEVICE 
enp9s0  848d316f-7ef5-41e4-9c17-7937195b7fbf  ethernet  enp9s0 
br0     08d2ea2b-7d18-4ee7-a0e3-9ad825b9d48c  bridge    br0    

KVMで使う用に定義する

bridge用の定義ファイルを作成する。

vi /usr/share/libvirt/networks/bridged-network.xml
<network>
    <name>bridged-network</name>
    <forward mode="bridge" />
    <bridge name="br0" />
</network>

作成したファイルを引数に入れてnet-defineする。

hoge@hoge-desktop:~$ virsh net-define /usr/share/libvirt/networks/bridged-network.xml
Network bridged-network defined from /usr/share/libvirt/networks/bridged-network.xml

これだけではまだinactiveなので--allをつけないと表示されない。

hoge@hoge-desktop:~$ virsh net-list --all
 Name              State      Autostart   Persistent
------------------------------------------------------
 bridged-network   inactive   no          yes

ネットワークの有効化と自動起動を設定する。

root@hoge-desktop:~$ virsh net-start bridged-network 
Network bridged-network started

hoge@hoge-desktop:~$ virsh net-list 
 Name              State    Autostart   Persistent
----------------------------------------------------
 bridged-network   active   no          yes

hoge@hoge-desktop:~$ virsh net-autostart bridged-network
Network bridged-network marked as autostarted

hoge@hoge-desktop:~$ virsh net-list 
 Name              State    Autostart   Persistent
----------------------------------------------------
 bridged-network   active   yes         yes

BtrfsでRAID5を使う

btrfsは複数のデバイスから1つのプールを作成することができる。プールはbtrfsが備えるRAID機能を用いることができる。今回は6本のディスクでRAID5を使用したプールを作成する。

btrfsについてはBtrfsの薄い本を参考にした。

github.com

追加したディスクの判別

fdisk -lでディスクの情報を表示してDisk Modelで追加したディスクか判別した。ディスクは秋葉原のショップインバースで500GB1200円で売られていたものを5本と、別の日に特価で640GB1200円の1本の合計6本を追加した。通常RAIDはディスクのサイズを揃えて置かないと容量が無駄になるがbtrfsのRAIDは容量が異なっていてもいい感じに使用してくれる。

hoge@hoge-desktop:~$ sudo fdisk -l

--- 中略 ---
ディスク /dev/sda: 596.17 GiB, 640135028736 バイト, 1250263728 セクタ
Disk model: ST9640320AS     
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト

ディスク /dev/sdb: 465.76 GiB, 500107862016 バイト, 976773168 セクタ
Disk model: ST500LT012-1DG14
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 4096 バイト
I/O サイズ (最小 / 推奨): 4096 バイト / 4096 バイト

ディスク /dev/sdc: 465.76 GiB, 500107862016 バイト, 976773168 セクタ
Disk model: ST500LT012-1DG14
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 4096 バイト
I/O サイズ (最小 / 推奨): 4096 バイト / 4096 バイト


ディスク /dev/sdd: 465.76 GiB, 500107862016 バイト, 976773168 セクタ
Disk model: ST500LM021-1KJ15
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 4096 バイト
I/O サイズ (最小 / 推奨): 4096 バイト / 4096 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0xc28aee7b

デバイス   起動 開始位置  最後から    セクタ サイズ Id タイプ
/dev/sdd1           2048 976769023 976766976 465.8G  7 HPFS/NTFS/exFAT

ディスク /dev/sde: 465.76 GiB, 500107862016 バイト, 976773168 セクタ
Disk model: ST500LT012-1DG14
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 4096 バイト
I/O サイズ (最小 / 推奨): 4096 バイト / 4096 バイト

--- 中略 ---

ディスク /dev/sdg: 465.76 GiB, 500107862016 バイト, 976773168 セクタ
Disk model: ST500LT012-1DG14
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 4096 バイト
I/O サイズ (最小 / 推奨): 4096 バイト / 4096 バイト

RAID5でプールを作成する

最初にbtrfs関係のパッケージを追加する。

sudo apt install btrfs-progs -y

-dでraid5を指定 -mはメタデータの設定でこちらもraid5にしておく データはRAID5でメタデータはRAID1みたいな構成もできる。

hoge@hoge-desktop:~$ mkfs.btrfs -m raid5 -d raid5 /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdg
btrfs-progs v5.10.1 
See http://btrfs.wiki.kernel.org for more information.

probe of /dev/sda failed, cannot detect existing filesystem.
ERROR: use the -f option to force overwrite of /dev/sda

エラーが出て失敗。gdiskでGPTとMBRを消す。

hoge@hoge-desktop:~$ sudo gdisk /dev/sda
GPT fdisk (gdisk) version 1.0.8

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries in memory.

Command (? for help): m
b   back up GPT data to a file
c   change a partition's name
d   delete a partition
i   show detailed information on a partition
l   list known partition types
n   add a new partition
o   create a new empty GUID partition table (GPT)
p   print the partition table
q   quit without saving changes
r   recovery and transformation options (experts only)
s   sort partitions
t   change a partition's type code
v   verify disk
w   write table to disk and exit
x   extra functionality (experts only)
?   print this menu

Command (? for help): d
No partitions

Command (? for help): x

Expert command (? for help): z
About to wipe out GPT on /dev/sda. Proceed? (Y/N): y
GPT data structures destroyed! You may now partition the disk using fdisk or
other utilities.
Blank out MBR? (Y/N): y

再実行したものの今度はsddにdosパーティションがあるので失敗(これはfdisk -lでみた時点でわかっていた)。これもgdiskで消す。

hoge@hoge-desktop:~$ sudo mkfs.btrfs -m raid5 -d raid5 /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdg
btrfs-progs v5.10.1 
See http://btrfs.wiki.kernel.org for more information.

/dev/sdd appears to contain a partition table (dos).
ERROR: use the -f option to force overwrite of /dev/sdd

消したあとにもう一度mkfs.btrfsを実行。 今度は正常に作成することができた。465.76GiB*5+596.17GiB(Total 2924.97GiB)の変則的な構成だと 2.86TiBになった。

hoge@hoge-desktop:~$ sudo mkfs.btrfs -m raid5 -d raid5 /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdg
btrfs-progs v5.10.1 
See http://btrfs.wiki.kernel.org for more information.

Label:              (null)
UUID:               ba3f187a-bfb3-47b5-aa02-334b15f2ea33
Node size:          16384
Sector size:        4096
Filesystem size:    2.86TiB
Block group profiles:
  Data:             RAID5             5.00GiB
  Metadata:         RAID5           853.12MiB
  System:           RAID5            13.12MiB
SSD detected:       no
Incompat features:  extref, raid56, skinny-metadata
Runtime features:   
Checksum:           crc32c
Number of devices:  6
Devices:
   ID        SIZE  PATH
    1   596.17GiB  /dev/sda
    2   465.76GiB  /dev/sdb
    3   465.76GiB  /dev/sdc
    4   465.76GiB  /dev/sdd
    5   465.76GiB  /dev/sde
    6   465.76GiB  /dev/sdg

btrfs filesystemc show で構成しているデバイスを確認できる。

hoge@hoge-desktop:~$ sudo btrfs filesystem show ba3f187a-bfb3-47b5-aa02-334b15f2ea33
Label: none  uuid: ba3f187a-bfb3-47b5-aa02-334b15f2ea33
    Total devices 6 FS bytes used 128.00KiB
    devid    1 size 596.17GiB used 1.17GiB path /dev/sda
    devid    2 size 465.76GiB used 1.17GiB path /dev/sdb
    devid    3 size 465.76GiB used 1.17GiB path /dev/sdc
    devid    4 size 465.76GiB used 1.17GiB path /dev/sdd
    devid    5 size 465.76GiB used 1.17GiB path /dev/sde
    devid    6 size 465.76GiB used 1.17GiB path /dev/sdg

マウントする

マウントするときにcompressオプションを使うと透過圧縮が使える。

sudo mount -o compress=lzo UUID=ba3f187a-bfb3-47b5-aa02-334b15f2ea33 /data

ついでにラベルをつける

sudo btrfs filesystem label /data pool01

hoge@hoge-desktop:~$ sudo btrfs filesystem show /data
Label: 'pool01'  uuid: ba3f187a-bfb3-47b5-aa02-334b15f2ea33
    Total devices 6 FS bytes used 1.56MiB
    devid    1 size 596.17GiB used 1.17GiB path /dev/sda
    devid    2 size 465.76GiB used 1.17GiB path /dev/sdb
    devid    3 size 465.76GiB used 1.17GiB path /dev/sdc
    devid    4 size 465.76GiB used 1.17GiB path /dev/sdd
    devid    5 size 465.76GiB used 1.17GiB path /dev/sde
    devid    6 size 465.76GiB used 1.17GiB path /dev/sdg

最後にfstabに追加して起動したときにマウントするようにしておく。

UUID=ba3f187a-bfb3-47b5-aa02-334b15f2ea33       /data   btrfs   compress=lzo    0       0

KVMのストレージプールのディレクトリを変更する

KVMをインストールしたときのデフォルトだと、ディスクのイメージは以下のディレクトリに格納されている。

/var/lib/libvirt/images/
hoge@hoge-desktop:~$ sudo ls  -l /var/lib/libvirt/images/
合計 16955880
-rw-r--r-- 1 libvirt-qemu kvm  11065622528  1月 29 01:02 CentOS-Stream-8-x86_64-latest-dvd1.iso
-rw------- 1 root         root 21478441031  3月 12 14:24 centos-stream8.qcow2
-rw-r--r-- 1 libvirt-qemu kvm   1261371392  8月 24  2021 ubuntu-20.04.3-live-server-amd64.iso
-rw-rw-r-- 1 libvirt-qemu kvm   1269377024  1月  8 20:38 ubuntu-21.10-live-server-amd64.iso

別のディスクなどにディレクトリを作成して、そちらを使用するように設定する。

既存のプールを表示する。今回だとインストールしたときに作成されたdefaultしかない状態。

hoge@hoge-desktop:~$ virsh pool-list
 Name      State    Autostart
-------------------------------
 default   active   yes
hoge@hoge-desktop:~$ virsh pool-info default 
Name:           default
UUID:           4b810024-19ca-4f6d-bcf2-388a85f53e95
State:          running
Persistent:     yes
Autostart:      yes
Capacity:       456.96 GiB
Allocation:     57.19 GiB
Available:      399.76 GiB

poolを停止して定義を解除する。

hoge@hoge-desktop:~$ sudo virsh pool-destroy default 
Pool default destroyed

hoge@hoge-desktop:~$ sudo virsh pool-undefine default 
Pool default has been undefined

ここで新しく使用するディレクトリを作成。今回は/data/vmimagesというディレクトリを作成した。 ディレクトリを作成したらpoolを定義する。

virsh pool-define-as --name default --type dir --target /data/vmimages

このままだとまだ利用できないので設定を変更する。 Autostart yesに変更

hoge@hoge-desktop:~$ virsh pool-info default 
Name:           default
UUID:           f5780d48-787f-4a5c-b27d-7f14ace00754
State:          inactive
Persistent:     yes
Autostart:      no

hoge@hoge-desktop:~$virsh pool-autostart default
Pool default marked as autostarted

hoge@hoge-desktop:/data$  virsh pool-info default 
Name:           default
UUID:           f5780d48-787f-4a5c-b27d-7f14ace00754
State:          inactive
Persistent:     yes
Autostart:      yes

poolをstartすると利用できるようになる

hoge@hoge-desktop:~$virsh pool-start default
Pool default started

hoge@hoge-desktop:~$virsh pool-list
 Name      State    Autostart
-------------------------------
 default   active   yes

hoge@hoge-desktop:~$ virsh pool-info default
Name:           default
UUID:           f5780d48-787f-4a5c-b27d-7f14ace00754
State:          running
Persistent:     yes
Autostart:      yes
Capacity:       2.86 TiB
Allocation:     4.83 MiB
Available:      2.86 TiB