web-dev-qa-db-ja.com

Hetzner専用サーバーのZFSルートでUbuntu 16.04を取得する

現在、ZFS root-fsでUbuntu 16.04を実行することは十分に可能です。 Ubuntu 16.04のデフォルトのパッケージマネージャーにはZFSがあり、 this のようなガイドがあれば、始めるのは難しくありません。

ただし、私が見たすべてのガイドでは、Ubuntuインストールイメージから起動できる必要があります。 Hetzner専用サーバーの場合、エンジニアがサーバーにアクセスしてリモートKVMをプラグインする必要があるため、これは一般的ではないインストール手順です。

デフォルトでは、専用サーバーはレスキューシステムで起動し、「installiamge」スクリプトを使用してさまざまなLinuxディストリビューションをインストールできます。ただし、このスクリプトはZFSをまだサポートしていません。

ZFSルートでHetzner専用サーバーを実行するにはどうすればよいですか?

3
TinkerTank

基本的な考え方は、Ubuntuをハードドライブの小さなパーティションにインストールし、ハードドライブをパーティション化して残りのスペースをZFSに使用し、インストールをコピーすることです。私は主に このガイド を使用して、その方法を説明しています。

怠惰で、Ansibleの経験はありますか?これらの手順を自動化するために、スクリプトの小さなスタックを作成しました。これらは以下で利用可能です https://github.com/tijszwinkels/hetzner-ubuntu-16.04-zfs-root-ansible/blob/master/hetzner-ubuntu-16.04.yml 注意してくださいホストがHetznerレスキューシステムで起動され、最初のステップとしてドライブをワイプすると仮定します。自己責任!

# SSH into the Host.

# Wipe the drives. Assuming SSDs on 'sda' and 'sdb'.
/sbin/blkdiscard /dev/sda
/sbin/blkdiscard /dev/sdb

# Install Ubuntu 16.04 on a 4G partition using the Hetzner 'installimage' script
/root/.oldroot/nfs/install/installimage -a -n my-hostname -r yes -l 1 -p /:ext4:4G -K /root/.ssh/robot_user_keys -i /root/.oldroot/nfs/install/../images/Ubuntu-1604-xenial-64-minimal.tar.gz

# Reboot the system.
/sbin/shutdown -r now

# Wait for the Host to come back up, and SSH in.

# Install the 'parted' parition editor
apt-get update && apt-get install -y parted

# Run parted on the first drive, create a partition in all remaining space. (UNTESTED!)
Sudo parted /dev/sda
(parted) mkpart primary 4097MB -1s
(parted) quit

# Run parted on the second drive, create a partition in all remaining space. (UNTESTED!)
Sudo parted /dev/sdb
(parted) mkpart primary 4097MB -1s
(parted) quit

# Install required ZFS packages
apt-get install -y zfs-dkms zfs-initramfs

# Create a ZFS pool named 'tank'
# Please note that I'm using the /dev/disk/by-id interface. This is more resilient than /dev/sda and /dev/sdb
zpool create -f -o ashift=13 -O atime=off -O dedup=off -O compression=lz4  tank mirror `ls /dev/disk/by-id/ata-*-part2` 

# Create OS partiton
zfs create tank/os

# Rsync the current system to the new partition.
rsync -a --one-file-system / /tank/os/

# Chroot into the system
cd /tank/os
mount --bind /dev dev
mount --bind /proc proc
mount --bind /sys sys
mount --bind /run run
chroot .

# Install GRUB into the drives
export ZPOOL_VDEV_NAME_PATH=YES
update-grub
grub-install /dev/sda
grub-install /dev/sdb

これで、ZFSルートfsでUbuntu 16.04を起動するHetzner専用サーバーができました。幸運を!

8
TinkerTank

すばらしいガイド、ありがとう@TinkerTank。

新しいNVMeサーバーのいずれかを使用していて、このガイドに従っている場合は、代わりに次の手順とデバイス名を使用することをお勧めします。


# Boot into rescue from Robot
# SSH into the Host.

# Wipe the drives. Assuming SSDs on 'sda' and 'sdb'.
# For SSD Servers
#/sbin/blkdiscard /dev/sda
#/sbin/blkdiscard /dev/sdb
# For NVMe Servers
/sbin/blkdiscard /dev/nvme0n1
/sbin/blkdiscard /dev/nvme1n1

# Install Ubuntu 16.04 on a 16G partition using the Hetzner 'installimage' script
# For Ubuntu 18.04 it should be this, but FAILS TO BOOT
#/root/.oldroot/nfs/install/installimage -a -n my-hostname -r yes -l 1 -p /:ext4:16G -K /root/.ssh/robot_user_keys -i /root/.oldroot/nfs/install/../images/Ubuntu-1804-bionic-64-minimal.tar.gz
# For Ubuntu 16.04:
/root/.oldroot/nfs/install/installimage -a -n my-hostname -r yes -l 1 -p /:ext4:16G -K /root/.ssh/robot_user_keys -i /root/.oldroot/nfs/install/../images/Ubuntu-1604-xenial-64-minimal.tar.gz
# Press x to continue immediately or wait a few seconds...

# Reboot the system.
#/sbin/shutdown -r now

reboot

# Wait for the Host to come back up, and SSH in.
# Update the server
apt update
apt upgrade

# Create a partition on first disk with all the remaining space.
fdisk /dev/nvme0n1
# Press n then accept all defaults and save with w 

# Create a partition on the second disk with all remaining space.
fdisk /dev/nvme1n1
Press n then accept all defaults and save with w 

reboot

# Install required ZFS packages
apt install zfsutils-linux

# Create a ZFS pool named 'tank'
# Please note that I'm using the /dev/disk/by-id interface. This is more resilient than /dev/sda and /dev/sdb
# For SSD servers @hetznet: zpool create -f -o ashift=13 -O atime=off -O dedup=off -O compression=lz4  tank mirror `ls /dev/disk/by-id/ata-*-part2` 
# For NVMe servers:
zpool create -f -o ashift=13 -O atime=off -O dedup=off -O compression=lz4  tank mirror nvme0n1p2 nvme1n1p2

# Create OS partition
zfs create tank/os

# Rsync the current system to the new partition.
rsync -a --one-file-system / /tank/os/

# Chroot into the system
cd /tank/os
mount --bind /dev dev
mount --bind /proc proc
mount --bind /sys sys
mount --bind /run run
chroot .

# Install GRUB into the drives
export ZPOOL_VDEV_NAME_PATH=YES
update-grub
# For SSD Servers:
#grub-install /dev/sda
#grub-install /dev/sdb
# For NVMe servers:
grub-install /dev/nvme0n1p2
grub-install /dev/nvme1n1p2

exit
reboot


これで、ZFSルートfsでUbuntu 16.04を起動するHetzner専用サーバーができました。幸運を!

buntu 16.04ではシームレスに機能しますが、Ubuntu 18.04では起動しません。理由と解決方法は誰でも知っていますか?

注意:元のチュートリアルで指定された4GBのHDDスペースの代わりに、16GBパーティションで初期OSを起動します。新しいサーバーには少なくとも2 GBの512 GB NVMeが付属しているため、これらの2 x 16パーティションをLinuxカーネルが単独でストライプする2 x 16 GB SWAPパーティションに変換できます(単一のRAIDパーティションを使用するよりも高速です)。

1
Yosu Cadilla