Ubuntu 18,04 Root pada ZFS

Tahun lalu saya perlu membuat instruksi untuk menginstal sistem operasi Ubuntu 18.04. Omong-omong, tidak ada yang rumit dalam menginstal Ubuntu, tetapi ada nuansa: Saya ingin menggunakan sistem file ZFS sebagai basis. Di satu sisi, Ubuntu mendukung ZFS di tingkat kernel, tetapi belum ada installer untuk itu, tetapi ada instruksi, ya:


https://github.com/zfsonlinux/zfs/wiki/Ubuntu-18.04-Root-on-ZFS


Urutan tindakan dalam manual ini umumnya benar, tetapi beberapa poin memerlukan penyesuaian. Jadi yang berikut ini bukan terjemahan langsung dari instruksi, tetapi gratis, dengan mempertimbangkan koreksi akun, pengalaman saya dengan ZFS dan hal-hal lain. Saya juga tidak mempertimbangkan masalah enkripsi disk dan menggunakan bootloader MBR. Instruksi instalasi saya dapat diperoleh di sini.



0. Persiapan server


Hal pertama yang hilang dalam instruksi dan tidak dipertimbangkan dengan cara apa pun adalah bahwa ZFS tidak bekerja dengan baik dengan array RAID perangkat keras, khususnya, itu terhubung dengan cache Write, yang dapat dimengerti: sistem file ZFS dijurnal dan memerlukan kontrol penuh atas operasi penulisan. Juga, ketika menggunakan array RAID perangkat keras yang sudah jadi, kemampuan ZFS hilang dalam hal Cache, Spare, dan banyak lagi. Oleh karena itu, semua disk harus ditransfer ke Mode HBA, dan jika tidak memungkinkan untuk melakukan ini, buat RAID terpisah untuk setiap disk dan nonaktifkan pengontrol Write Cache.


Juga, ketika menggunakan agregasi port jaringan, Anda dapat menonaktifkannya pada tahap instalasi, agar tidak menyulitkannya (saya akan melakukan semua operasi lebih lanjut tanpa ikatan).


1. Mempersiapkan lingkungan instalasi


1.1. Livecd


Seperti yang disebutkan sebelumnya, sayangnya, tidak ada penginstal Ubuntu yang sudah jadi menggunakan root pada ZFS, jadi penginstalan dilakukan menggunakan disk LiveCD:


Unduh dari sini: http://releases.ubuntu.com/18.04/ubuntu-18.04.1-desktop-amd64.iso


Pada saat yang sama, saya mencoba dengan rekan-rekan untuk menggunakan berbagai gambar disk karena saya tidak benar-benar ingin menggunakan shell grafis, tetapi ini tidak mengarah pada sesuatu yang baik.

Kami boot dari LiveCD, pilih Coba Ubuntu dan buka terminal (Ctrl + Alt + T).


1.2. Memperbarui dan menginstal repositori

''
sudo apt-add-repository universe sudo apt update 

Di sini kita menunggu gelandangan pertama jika pengaturan jaringan server tidak ditentukan oleh DHCP. Memperbarui repositori tidak akan berfungsi, jadi mari kita atur jaringan.

Kami melihat antarmuka jaringan dan menemukan yang melaluinya kami akan terhubung:


 sudo ip a 

Konfigurasikan antarmuka jaringan:


 sudo echo "auto {{ NAME }}" >> /etc/network/interfaces sudo echo "iface {{ NAME }} inet static" >> /etc/network/interfaces sudo echo " address {{ IP }}" >> /etc/network/interfaces sudo echo " netmask {{ NETMASK }}" >> /etc/network/interfaces sudo echo " gateway {{ GATEWAY }}" >> /etc/network/interfaces sudo service networking restart 

Dan penyelesai DNS:


 sudo echo 'nameserver 8.8.8.8' >> /etc/resolv.conf 

Memperbarui repositori:


 sudo apt update 

1.3. Server SSH (opsional)


Untuk kemudahan instalasi, Anda dapat meningkatkan server OpenSSH dan melakukan semua operasi lebih lanjut melalui klien SSH


Tetapkan kata sandi untuk pengguna ubuntu:


 passwd 

Ini penting! Karena sebaliknya, akses melalui ssh akan dilakukan tanpa kata sandi dengan hak sudo. Namun, Anda tidak dapat mengatur kata sandi sederhana.

Instal dan jalankan OpenSSH:


 sudo apt install openssh-server sudo service ssh start 

Dan di terminal workstation:


 ssh ubuntu@{{ ip server }} 

1.4. Menjadi root


 sudo -s 

1.5. Menginstal Dukungan ZFS di Lingkungan LiveCD


 apt install --yes debootstrap gdisk zfs-initramfs 

2. Mempartisi dan memformat hard drive


2.0. Menentukan Array Disk


Instruksi utama tidak mengandung poin penting tentang cara menentukan array disk.


Biasanya, jumlah disk di server adalah:


  • 2 disk;
  • 4 disc;
  • banyak disk;

Kami tidak menganggap 1 disk karena umumnya anomali.


2.0.1. 2 disc


Semuanya sederhana di sini, satu array MIRROR (RAID1). Jika ada drive ketiga lain, Anda dapat memasukkannya ke cadangan panas (SPARE) atau merakit array RAIDZ (RAID5). Tetapi 3 disk di server sangat jarang.


2.0.2. 4 disc


Jika semua drive sama, hanya ada tiga opsi (RAID0 keempat pada dasarnya saya tidak mempertimbangkan):


  • MIRROR + MIRROR adalah analog dari RAID10, lebih tepatnya RAID01, karena di ZFS itu adalah mirror + mirror. 50% dari ruang disk yang tersedia;
  • RAIDZ adalah analog dari RAID5. 75% dari ruang disk yang tersedia;
  • RAIDZ2 adalah analog dari RAID6. 50% dari ruang disk yang tersedia;

Dalam prakteknya, saya menggunakan array MIRROR + MIRROR, sementara itu jelas bahwa array RAIDZ paling menguntungkan, karena menyediakan lebih banyak ruang disk, tetapi ada nuansa


Dalam hal toleransi kesalahan, susunan diatur dalam urutan ini (dari yang terbaik ke yang terburuk):


  • RAIDZ2 - dua disk dapat hilang tanpa kehilangan data;
  • MIRROR + MIRROR - satu disk dapat hilang tanpa kehilangan data, dan dengan probabilitas 66%, disk kedua dapat hilang tanpa kehilangan data;
  • RAIDZ - hanya satu disk yang bisa hilang tanpa kehilangan data;

Dalam hal kecepatan, susunan diatur dalam urutan ini:


  • CERMIN + CERMIN - baik dalam hal menulis dan membaca;
  • RAIDZ - dalam hal perekaman lebih lambat, karena selain merekam, diperlukan untuk menghitung checksum;
  • RAIDZ2 - dalam hal penulisan lebih lambat karena membutuhkan perhitungan checksum yang lebih kompleks;

Dalam hal kecepatan array selama degradasi satu disk:


  • CERMIN + CERMIN - ketika satu drive jatuh, pada dasarnya hanya pembacaan paralel dari satu cermin yang hilang, cermin kedua bekerja tanpa degradasi kinerja;
  • RAIDZ2 - degradasi dalam degradasi kinerja lebih tinggi karena memerlukan alokasi mundur blok dari checksum untuk 1/4 dari data + pencarian blok
  • RAIDZ - degradasi jauh lebih besar, karena membutuhkan perhitungan ulang blok dari checksum untuk 1/3 dari pencarian data + blok;

Perbandingan karakteristik bersifat subyektif, tetapi cukup mencerminkan pilihan saya sebagai jalan tengah.


Pada saat yang sama, Anda perlu memahami bahwa "lebih lambat" dan "bahkan lebih lambat" tidak kadang-kadang, tetapi hanya 10-20% dalam kasus terburuk, oleh karena itu, jika database atau aplikasi Anda untuk bekerja dengan disk tidak dioptimalkan, maka Anda akan menurunkan kecepatan pada prinsipnya, jangan perhatikan. Faktor kecepatan perekaman harus dipertimbangkan hanya ketika Anda benar-benar membutuhkannya.


2.0.2. Banyak cakram


Masalah utama adalah bahwa jika kita memiliki banyak disk dan kita ingin membuat satu array umum untuk semuanya, kita perlu menandai setiap disk dengan sektor boot atau melakukan sedikit tipuan dengan telinga kita. Dalam praktiknya, untuk platform multi-disk, saya mencoba membangun konfigurasi ini:


  • 2 disk SSD - kami menjadikan mirror dan sebagai larik boot utama dengan sistem operasi dan cache ZFS untuk larik disk kedua;
  • Sisanya tersumbat dengan disk SATA atau SAS dan tanpa markup kami mengumpulkan array disk ZFS;

Hal yang sama berlaku untuk server 4-disk jika kita ingin mendapatkan platform yang cukup universal;


Jika semua disk sama, dan tidak masuk akal untuk mengalokasikan dua disk untuk array terpisah (misalnya, masing-masing 6 disk masing-masing 8 Tb), maka Anda dapat membuat disk yang dapat di-boot dari grup pertama array. Artinya, jika Anda akan membuat array seperti: MIRROR + MIRROR + MIRROR atau RAIDZ + RAIDZ, maka kami menandai sektor boot hanya untuk grup pertama. Pada prinsipnya, dimungkinkan untuk mempartisi hanya satu drive sama sekali, bahkan untuk MIRROR dan RAIDZ, dan mengganti sisanya dalam bentuk mentah, ZFS akan membuat array dengan elemen yang lebih kecil itu sendiri, tetapi dalam kasus ini, jika drive pertama gagal, Anda kehilangan satu-satunya disk boot, jadi Anda tidak perlu layak dilakukan.


Penting untuk dipahami bahwa dalam sistem file ZFS-stripe ini bukan RAID0, dan bekerja sedikit berbeda dan tidak memerlukan ukuran disk yang sama, jadi mengalokasikan ruang kecil untuk sektor boot cuaca tidak akan banyak, hal utama adalah untuk menunjukkan di BIOS disk yang benar untuk boot .


2.1. Partisi dan Pembersihan Disk


Paket mdadm digunakan untuk menandai disk, taruh:


 apt install --yes mdadm 

Kami melihat cakram mana yang kami miliki:


 lsblk 

Dan bersihkan mereka:


 sgdisk --zap-all /dev/{{ disk name }} 

2.2. Tata letak disk


Sebenarnya, partisi boot:


 sgdisk -a1 -n1:34:2047 -t1:EF02 /dev/{{ disk name }} 

Bagian utama.


Di sini mungkin ada variasi: jika Anda perlu mengalokasikan partisi tambahan disk SSD, misalnya, untuk ZFS Cache atau untuk Aerospike, maka Anda membuat partisi utama dengan volume terbatas:

 sgdisk -n2:0:+100GB -t2:BF01 /dev/{{ disk name }} sgdisk -n3:0:0 -t2:BF01 /dev/{{ disk name }} 

Jika kami menggunakan semua ruang, maka cukup buat bagian untuk ruang yang tersisa:


 sgdisk -n2:0:0 -t2:BF01 /dev/{{ disk name }} 

Jangan lupa untuk memeriksa bagaimana hasilnya:


 lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 1.8T 0 disk ├─sda1 8:1 0 1007K 0 part └─sda2 8:2 0 1.8T 0 part sdb 8:16 0 1.8T 0 disk ├─sdb1 8:17 0 1007K 0 part └─sdb2 8:18 0 1.8T 0 part ... 

2.3. Membuat ZFS Array


 zpool create \ -o ashift=12 \ -O atime=off \ -O canmount=off \ -O compression=lz4 \ -O checksum=fletcher4 \ -O normalization=formD \ -m legacy \ -R /mnt \ -f \ tank \ mirror \ /dev/{{ disk a part 2}} \ /dev/{{ disk b part 2}} 

Penggaruk pertama di mana salah satu admin saya yang akrab segera melangkah, itu adalah bahwa ketika membuat array ZFS, diperlukan untuk menentukan bukan disk tetapi partisi pada disk, jika itu khusus dibuat untuk ini.

Selanjutnya, dalam urutan:


  • ashift = 12 - gunakan ukuran blok dalam 4K, pada prinsipnya, saya masih tidak mengerti mengapa sering dalam sistem operasi ukuran blok default adalah 512 byte ketika praktis tidak ada disk seperti itu;
  • atime = off - nonaktifkan pembaruan tanggal akses ke file, saya selalu mematikannya karena saya tidak pernah benar-benar membutuhkan informasi ini dan tidak perlu memuat kernel lagi;
  • canmount = off - menonaktifkan kemampuan untuk me-mount partisi root;
  • compression = lz4 - mengaktifkan kompresi data dengan algoritma LZ4. Parameter ini direkomendasikan untuk dimasukkan tidak hanya untuk menghemat ruang disk, tetapi juga untuk mengurangi jumlah operasi I / O. Pada saat yang sama, untuk aglomerasi kompresi ini, utilisasi CPU sangat rendah
  • checksum = fletcher4 - algoritma checksum default, dan karenanya fletcher4 layak untuk diperiksa lagi;
  • normalisasi = formD - digunakan untuk meningkatkan kerja dengan UTF-8, pada kenyataannya membatasi kemungkinan menggunakan nama file non-UTF-8. Di sini setiap orang memutuskan sendiri, dalam pekerjaan kami, kami selalu menggunakan hanya pengkodean UTF-8;
  • xattr = sa - Mempercepat kerja dengan atribut yang diperluas. Saya tidak menggunakan opsi ini karena ketika opsi ini digunakan, kompatibilitas dengan implementasi OpenZFS lainnya dinonaktifkan (misalnya: FreeBSD). Dan kompatibilitas dengan Windows dan omong-omong, saya perlu. Selain itu, opsi ini dapat diaktifkan di bagian akhir;
  • -m legacy - mount point ke mana-mana, dan tidak perlu me-mount partisi root;
  • -R / mnt - awalan pemasangan partisi sementara untuk menginstal kernel;
  • -f - memaksa pembuatan array. Jika array ZFS dikumpulkan pada disk sebelumnya, maka perintah create tidak akan berfungsi, Anda tidak pernah tahu, mungkin Anda membuat kesalahan dan ingin menghapus data penting;

Saya biasanya menunjukkan nama array disk sistem root sebagai tangki, meskipun saat ini mereka lebih suka menggunakan nama rpool (root pool) di lingkungan Linux. Dalam praktik saya, saya biasanya menggunakan penamaan array ini:


  • tangki - susunan sistem utama;
  • store - array tambahan dengan disk besar untuk penyimpanan data;
  • cache - array tambahan disk SSD, jika partisi utama tidak ada di dalamnya;

Secara umum, saya sangat merekomendasikan segera mengembangkan praktik penamaan sesuatu yang tidak akan membingungkan.


3. Instalasi Sistem


3.1. dan 3.2. Membuat sistem file root


Saya secara khusus menggabungkan paragraf 3.1. dan 3.2. karena saya percaya bahwa menentukan partisi root di tingkat ketiga benar-benar berlebihan. Itu benar, selama beberapa tahun bekerja dengan ZFS, saya tidak pernah perlu melakukan manipulasi dengan partisi root. Selain itu, ada gambar yang dapat digunakan untuk membuat titik kontrol. Karena itu, bagian root saya adalah tangki / root:

 zfs create -o mountpoint=/ tank/root 

Pada saat yang sama, kesalahan fatal pertama terdeteksi dalam instruksi asli, yaitu kurangnya partisi boot untuk array disk:

 zpool set bootfs=tank/root tank 

3.3. Buat partisi tambahan


Di bagian instruksi dasar ini Anda bisa melempar semuanya dan melupakan. Orang-orang jelas overdid dengan penghancuran dan pilihan, karena itu, di sepanjang jalan, saya harus memperbaiki sesuatu. Benar, itu tidak banyak membantu. Karena masalah kemudian muncul lagi dan pada akhirnya ternyata ini semua tidak berfungsi, oleh karena itu, dalam paragraf 4.11. ini diperbaiki lagi.


Memisahkan bagian yang terpisah untuk / var / game terlihat cukup epik. Saya tidak keberatan, tapi ini jelas terlalu banyak.


Fakta bahwa partisi dibuat dalam ZFS sederhana dan mendukung hierarki tidak berarti bahwa direktori klasik harus ditinggalkan. Contoh sederhana: Saya pernah memiliki lebih dari 4K ZFS partisi di grup server, itu perlu, tetapi server reboot melambat selama beberapa menit karena pemasangan partisi ini.


Mari kita mulai dengan yang bersih.


Ada partisi file statis dan dinamis.


Bagian file statis termasuk bagian dengan program dan pengaturannya, mereka diisi sekali dan tidak berubah selama operasi. Pada saat yang sama, partisi statis sebelumnya dibagi menjadi partisi sistem dan pengguna (/ usr), tetapi saat ini mereka dicampur dalam sistem operasi Linux dan tidak ada gunanya memisahkannya, dan itu tidak akan berhasil.


Bagian file dinamis termasuk bagian yang disimpan:


  • Data sementara - persamaan: tmp, swap;
  • Log kerja - mis.: Var / log;
  • Data pengguna - mis.: Rumah;
  • Data - persamaan: var / db dan betapa beruntungnya;
  • Hasil program lainnya dalam bentuk file;

Dalam keluarga Linux, partisi dinamis termasuk / tmp dan / var, tetapi ini tidak akurat, karena mereka dapat masuk ke / var / lib, program dan perpustakaan, secara umum, semuanya tercampur, tetapi tetap ...


Pertama, Anda perlu memutuskan apakah akan membuat partisi / tmp pada disk atau dalam memori sebagai tmpfs. Jika kita buat di disk, lalu buat partisi terpisah untuk itu:


 zfs create -o mountpoint=legacy tank/tmp 

Pilihan com.sun: snapshot otomatis = false setuid = mati dengan baik, tidak peduli bagaimana cuaca dilakukan, jangan menyulitkan. Tetapi dengan SWAP kita akan lakukan nanti pada langkah 7.

Pisahkan bagian var secara terpisah:


 zfs create -o mountpoint=legacy tank/var 

Dan bagian pengguna:


 zfs create -o mountpoint=/home tank/home zfs create -o mountpoint=legacy tank/home/root 

Masuk akal untuk mengalokasikan partisi pengguna, karena dalam praktiknya mereka secara berkala tersumbat dengan artefak yang berbeda dan untuk membuatnya lebih mudah untuk memantau mereka, lebih baik untuk membuat partisi yang terpisah untuk mereka, serta direktori home pengguna root (terutama bagi mereka yang suka bekerja sebagai root). Menggunakan kuota pada direktori pengguna tidak hanya tidak membantu untuk menyumbat ruang disk, tetapi juga mengganggu, karena dalam kasus seperti itu, pengguna mulai meninggalkan artefak di mana saja dan itu bisa sangat sulit untuk menemukannya nanti. Ini tidak dirawat, jadi Anda hanya perlu mengontrol dan memukul tangan.

mount point tank / home / root terdaftar sebagai legacy, bukan sebagai / root. Ini benar, karena pemasangan bagian ini dilakukan di bagian 4.11


Sekarang kita perlu me-mount sementara partisi dinamis kita di / mnt:


 cd /mnt/ mkdir var tmp root mount -t zfs tank/var /mnt/var/ mount -t zfs tank/tmp /mnt/tmp/ mount -t zfs tank/home/root /mnt/root/ 

3.4 Memasang kernel


Dalam instruksi utama ada beberapa perintah yang tidak perlu, kami tidak memperhatikan, tampaknya artefak percobaan:

 debootstrap bionic /mnt 

Akibatnya, Anda harus mendapatkan sesuatu seperti ini:


 zfs list NAME USED AVAIL REFER MOUNTPOINT tank 213M 1.76T 96K legacy tank/home 208K 1.76T 96K /mnt/home tank/home/root 112K 1.76T 112K legacy tank/root 147M 1.76T 147M /mnt tank/tmp 96K 1.76T 96K legacy tank/var 64.6M 1.76T 64.6M legacy 

Ukuran partisi 96K yang kosong, masing-masing, hanya tangki / tmp yang tetap kosong, dan sisanya dicatat selama instalasi kernel, yang berarti bahwa partisi-partisi dipasang dengan benar.


4. Konfigurasi sistem


4.1. Konfigurasikan host dan nama host


 echo HOSTNAME > /mnt/etc/hostname echo “127.0.0.1 localhost” > /mnt/etc/hosts echo “127.0.0.1 HOSTNAME” >> /mnt/etc/hosts 

4.2. Konfigurasikan antarmuka jaringan


Jadi ya, kami sudah memiliki netplan di sini:

 nano /mnt/etc/netplan/setup.yaml network: version: 2 renderer: networkd ethernets: eno2: dhcp4: no dhcp6: no addresses: [ {{ IP }}/{{ netmask }}, ] gateway4: {{ gateway IP }} nameservers: addresses: [8.8.8.8] 

4.3. Konfigurasikan repositori apt


 nano /mnt/etc/apt/sources.list deb http://archive.ubuntu.com/ubuntu/ bionic main restricted universe deb http://security.ubuntu.com/ubuntu/ bionic-security main restricted universe deb http://archive.ubuntu.com/ubuntu/ bionic-updates main restricted universe 

src - kebanyakan tidak diperlukan

4.4. Kami memasang bagian file virtual LiveCD dan "pergi" ke sistem baru


 mount --rbind /dev /mnt/dev mount --rbind /proc /mnt/proc mount --rbind /sys /mnt/sys chroot /mnt /bin/bash --login 

diperlukan untuk menggunakan - rbind, tetapi tidak - bind

Kami sudah berada di sistem baru ...


4.5. Atur lingkungan dasar


 ln -s /proc/self/mounts /etc/mtab chmod 1777 /tmp apt update 

Lokal dan waktu:


 dpkg-reconfigure locales * en_US.UTF-8 * ru_RU.UTF-8 dpkg-reconfigure tzdata 

Dan editor tambahan yang suka apa:


 apt install --yes vim nano 

4.6. Menginstal Dukungan ZFS


 apt install --yes --no-install-recommends linux-image-generic apt install --yes zfs-initramfs 

4.8. Instal bootloader


Seperti yang dikatakan sebelumnya, saya menggunakan MBR yang sudah ketinggalan zaman:


 apt install --yes grub-pc 

Selama instalasi bootloader, diperlukan untuk memilih semua disk kami yang kami identifikasi sebagai bootable, sementara installer bersumpah pada semua disk lain kecuali yang pertama, kami setuju dan melakukan langkah 5 (tidak jelas mengapa sisanya dibiarkan nanti):

4.8.1. (5.1) Periksa apakah sistem file root dikenali:


 grub-probe / zfs 

4.8.2. (5.2) Memperbarui initrd


 update-initramfs -u -k al 

4.8.3. (5.3) Sederhanakan Debugging GRUB


 vi /etc/default/grub ... GRUB_CMDLINE_LINUX_DEFAULT="" GRUB_CMDLINE_LINUX="console" ... 

4.8.4. (5.4.) Memperbarui konfigurasi bootloader


 update-grub 

4.8.5. (5.5.) Instal bootloader pada setiap disk yang ditandai sebagai bootable


 grub-install /dev/sda grub-install /dev/sdb ... 

Penting bahwa perintah ini bekerja dengan benar. Sejujurnya, saya tidak bisa mendapatkan sebaliknya setidaknya sekali, jadi saya tidak tahu harus berbuat apa, tetapi kemungkinan besar, jika Anda memiliki kesalahan, Anda mungkin melakukan sesuatu yang salah ketika menandai disk (Bagian 2.2.).

4.8.6. (5.6.) Periksa apakah modul ZFS diinstal


 ls /boot/grub/*/zfs.mod /boot/grub/i386-pc/zfs.mod 

4.10. Setel kata sandi root (sulit!)


 passwd 

Dan ya, kami akan segera menginstal openssh, jika tidak kami akan mendapat kejutan setelah restart jika kami bekerja dari jarak jauh:

 apt install --yes openssh-server 

Jangan lupa untuk memperbaiki konfigurasi sshd:


 vi /etc/ssh/sshd_config ... PermitRootLogin yes ... PasswordAuthentication yes ... 

4.11. Memperbaiki sistem file mount


Di sini kita sampai pada yang paling menarik. Faktanya adalah partisi ZFS di-mount setelah dimulainya beberapa daemon (kami juga mengayunkan ZFS_INITRD_ADDITIONAL_DATASETS di / etc / default / zfs), yang, pada gilirannya, membuat beberapa struktur sendiri di / var mulai mengisi log sistem. Ketika tiba saatnya untuk me-mount partisi ZFS, ternyata titik mount tidak kosong dan tidak ada mount, data tersebar, semuanya buruk. Oleh karena itu, Anda perlu menentukan titik mount di / etc / fstab karena systemd terutama berfokus pada mereka ketika mengakses folder:

 vi /etc/fstab tank/var /var zfs noatime,nodev 0 0 tank/tmp /tmp zfs noatime,nodev 0 0 tank/home/root /root zfs noatime,nodev 0 0 

Sisanya hingga klausa 6. sudah selesai

6. Reboot pertama


6.1. Ambil gambar partisi root


 zfs snapshot tank/root@setup 

Tidak ada artinya dari dia, dalam prakteknya saya tidak pernah mengguncang partisi root dari sistem dan tidak pernah menggunakan snapshot dari partisi ini, tetapi tetap saja bohong, mungkin berguna

6.2. Keluar dari chroot


 exit 

6.3. Lepaskan partisi LiveCD dan ekspor larik ZFS


 cd mount | grep -v zfs | tac | awk '/\/mnt/ {print $3}' | xargs -i{} umount -lf {} umount /mnt/root umount /mnt/var umount /mnt/tmp zpool export tank 

Ekspor array disk diperlukan untuk menghapus cache zfs

6.4 Reboot


Mem-boot ulang paling baik dilakukan di terminal LiveCD, karena jika Anda bekerja melalui klien ssh, mem-boot ulang itu dapat menyebabkan server "membeku".

 reboot 

Namun, jika ada yang tidak beres dan server tidak mau reboot, maka Anda dapat mem-boot ulang dengan cara apa pun, karena array ZFS diekspor dan sulit untuk merusaknya.

6.5. Kami sedang menunggu untuk reboot dan pergi sebagai root


6.6. Buat akun pengguna Anda


 zfs create tank/home/{{ LOGIN }} useradd -u {{ UID }} -G adm,sudo -d /home/{{ LOGIN }}/ -s /bin/bash {{ LOGIN }} cp -a /etc/skel/.[!.]* /home/{{ LOGIN }} chown -R {{ LOGIN }}:{{ LOGIN }} /home/{{ LOGIN }} 

Tambahkan kunci ssh publik ke pengguna dan atur kata sandi untuknya:


 su - {{ LOGIN }} mkdir .ssh chmod 0700 .ssh vi .ssh/authorized_keys exit passwd {{ LOGIN }} 

Di OpenSSH kami menghapus kemampuan untuk login sebagai otentikasi root dan kata sandi:

 vi /etc/ssh/sshd_config ... PermitRootLogin no ... PubkeyAuthentication yes ... PasswordAuthentication no ... service ssh restart 

6.7. 6.8. Tidak lagi diperlukan


7. Mengkonfigurasi swap


7.1. Buat partisi ZFS


 zfs create \ -V 32G \ -b $(getconf PAGESIZE) \ -o compression=zle \ -o logbias=throughput \ -o sync=always \ -o primarycache=metadata \ -o secondarycache=none \ tank/swap 

  • -V 32G - Ukuran SWAP kami, Anda dapat menentukan yang benar-benar dibutuhkan;
  • -b $ (getconf PAGESIZE) - ukuran blok (4K dengan ashift = 12);
  • compression = zle - pilih algoritma kompresi yang minimal dalam hal konsumsi sumber daya, pada kenyataannya, karena ukuran blok adalah 4K, kompresi seperti itu tidak akan memungkinkan pemanfaatan I / O, tetapi dimungkinkan untuk menghemat nol blok;
  • logbias = throughput - pengaturan bandwidth untuk mengoptimalkan operasi sinkron;
  • sync = selalu - selalu menyinkronkan catatan. Ini sedikit mengurangi kinerja, tetapi sepenuhnya menjamin keandalan data;
  • primarycache = metadata - hanya metadata cache, karena swap tidak akan digunakan untuk membaca blok yang sama beberapa kali;
  • secondarycache = none - menonaktifkan cache sekunder sama sekali untuk alasan yang disebutkan di atas;

7.2. Siapkan partisi swap


 mkswap -f /dev/zvol/tank/swap echo /dev/zvol/tank/swap none swap defaults 0 0 >> /etc/fstab echo RESUME=none > /etc/initramfs-tools/conf.d/resume 

7.3. Aktifkan swap


 swapon -av 

Mengikuti petunjuk, tidak banyak yang menarik, karena sangat tergantung pada preferensi administrator tertentu dan tugas server secara keseluruhan, kecuali satu titik, yaitu: "Boot darurat"

Dan jangan lupa untuk memasang Firewall


R. Boot darurat


Kami menyiapkan lingkungan instalasi (item 1.)


Selama persiapan, array ZFS diimpor, jadi Anda perlu mengimpornya kembali, tetapi dengan titik pemasangan yang benar:


 zpool export -a zpool import -N -R /mnt tank zfs mount -a 

, , , fstab, :

 mount -t zfs tank/var /mnt/var/ mount -t zfs tank/tmp /mnt/tmp/ mount -t zfs tank/home/root /mnt/root/ 

, , chroot .4.4., . 6.3.


D.


3.3. . , : , /spool, /data. ZFS .


Ringkasan


  • ZFS , , ;
  • ZFS, , . ZFS — , ;
  • .

Source: https://habr.com/ru/post/id439860/


All Articles