Struktur (LVM2 + XFS) & Btrfs dalam LUKS2
QEMU/KVM (Manual)
- Saya sediakan tulisan ini sebagai nota untuk rujukan saya sendiri.
- I used the command provided in [my previous post] applicable for Linux (UEFI) to load the Live CD.
- Walaupun tiada keperluan kerana saya memang sudah menggunakan sistem ini sebagai sistem operasi utama saya, tetapi apa yang saya catatkan ini berguna untuk saya aplikasikan bagi tujuan pemasangan di komputer riba sebagai hos di lain-lain masa. Pun begitu, sekiranya tuan / puan membaca dan menggunakan nota saya ini sebagai rujukan, perlu saya ingatkan bahawa akan ada beberapa perkara yang perlu dilaras mengikut keadaan misalnya sambungan WiFi tidak terpakai dalam VM tetapi ia perlu dikonfigurasi bagi sistem hos.
Setelah Live CD berjaya boot dan dilog masuk sebagai root, set tulisan yang lebih besar di konsol dengan font
Terminus:bashsetfont ter-d22bBoleh ubah22kepada24/28/32jika mahukan tulisan konsol yang lebih besar daripada itu. Lokasi tulisan-tulisan konsol adalah di dalam direktori/usr/share/kbd/consolefonts.Dapatkan senarai blok pemacu:
bashalias lsblk="lsblk -o NAME,FSTYPE,SIZE,UUID,LABEL,MOUNTPOINTS" lsblk
Susun atur untuk (LVM2 + XFS) dalam LUKS2

/dev/mapper/myvg-root = /dev/myvg/root/dev/mapper/myvg-home = /dev/myvg/home
Susun atur untuk Btrfs dalam LUKS2

Mountpoints di dalam arch-chroot / selepas boot sistem yang telah dipasang. Sekiranya berada di luar arch-chroot yakni masih dalam suasana Live CD, saya lebih gemar mount partitions ke dalam direktori baru i.e. /mnt/arch (instead of /mnt).Setup partitions. (Kondisinya adalah sama untuk kedua-dua jenis format):
bashgdisk /dev/nvme0n1Command (? for help): n Partition number (1-128, default 1): First sector (34-62914526, default = 2048) or {+-}size{KMGTP}: Last sector (2048-62914526, default = 62912511) or {+-}size{KMGTP}: +260M Current type is 8300 (Linux filesystem) Hex code or GUID (L to show codes, Enter = 8300): ef00 Changed type of partition to 'EFI system partition'
Command (? for help): n Partition number (2-128, default 2): First sector (34-62914526, default = 534528) or {+-}size{KMGTP}: Last sector (534528-62914526, default = 62912511) or {+-}size{KMGTP}: +512M Current type is 8300 (Linux filesystem) Hex code or GUID (L to show codes, Enter = 8300): Changed type of partition to ‘Linux filesystem’
Command (? for help): n Partition number (3-128, default 3): First sector (34-62914526, default = 1583104) or {+-}size{KMGTP}: Last sector (1583104-62914526, default = 62912511) or {+-}size{KMGTP}: 62914526 Current type is 8300 (Linux filesystem) Hex code or GUID (L to show codes, Enter = 8300): 8309 Changed type of partition to ‘Linux LUKS’
Command (? for help): p Disk /dev/nvme0n1: 62914560 sectors, 30.0 GiB Model: QEMU NVMe Ctrl Sector size (logical/physical): 512/512 bytes Disk identifier (GUID): 9B38641F-9465-43B0-8F1D-3F28D94A670B Partition table holds up to 128 entries Main partition table begins at sector 2 and ends at sector 33 First usable sector is 34, last usable sector is 62914526 Partitions will be aligned on 2048-sector boundaries Total free space is 2014 sectors (1007.0 KiB)
Number Start (sector) End (sector) Size Code Name 1 2048 534527 260.0 MiB EF00 EFI system partition 2 534528 1583103 512.0 MiB 8300 Linux filesystem 3 1583104 62914526 29.2 GiB 8309 Linux LUKS
Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!!
Do you want to proceed? (Y/N): Y OK; writing new GUID partition table (GPT) to /dev/nvme0n1. The operation has completed succesfully.
Dah kenapa partition ketiga tu letak nombor panjang-panjang macam tu? Oh, sebab dia dah kata dekat situ, sektor terakhir adalah62914526, tetapi tetapan lalai yang dia bagi berakhir lebih awal iaitu di sektor62912511. Jadi kita isilah sektor yang betul-betul akhir itu demi mengelakkan pembaziran ruang lebihan yang tidak digunakan. Sesungguhnya membazir itu amalan syaitan.Format partition untuk
ESPyang akan menempatkan bootloaderEFI(saya guna GRUB2):bashmkfs.fat -F 32 -n ESP /dev/nvme0n1p1Format partition
BOOT(mengikut format masing-masing).(LVM2 + XFS)
bashmkfs.xfs -L BOOT /dev/nvme0n1p2(Btrfs)
bashmkfs.btrfs -L BOOT -n 32k /dev/nvme0n1p2Kenapa tidak partition/bootitu disimpan di dalam partition/(root) sahaja?- Jawapannya adalah kerana sokongan bootloader GRUB2 terhadap partition
/bootyang disulitkan denganLUKS2adalah terhad.LUKS1tidak mempunyai limitasi ini namun saya tidak memilihnya keranaLUKS2ini adalah format terkini yang dibangunkan dengan ciri-ciri yang lebih baik. - Ada kaedahnya jika mahu juga setup
/bootini di dalam partition root dengan penyulitan berformatkan LUKS2, tetapi perlu rajin untuk mengaplikasikan kaedah tambahan yang telah diubahsuai supayagrubdapat mengesan dan membaca kernel. Rujuk [ArchWiki | GRUB#LUKS2] untuk keterangan lanjut.
- Jawapannya adalah kerana sokongan bootloader GRUB2 terhadap partition
Encrypt partition ketiga.
bashcryptsetup luksFormat /dev/nvme0n1p3WARNING! ======== This will overwrite data on /dev/nvme0n1p3 irrevocably.
Are you sure? (Type 'yes' in capital letters): YES Enter passphrase for /dev/nvme0n1p3: _ Verify passphrase: _ cryptsetup luksFormat /dev/nvme0n1p3 19.78s user 0.71s system 5% cpu 6:49.45 totalDan buka di peranti
cryptarchvm. Hendak bagi nama apa pun kepada peranti itu, terpulanglah pada keputusan masing-masing.bashcryptsetup open /dev/nvme0n1p3 cryptarchvmEnter passphrase for /dev/nvme0n1p3: _ cryptsetup open /dev/nvme0n1p3 cryptarchvm 6.54s user 0.33s system 10% cpu 3.327 total
(LVM2 + XFS)
- Buat ① Physical Volume, ② Volume Group berserta ③ Logical Volumes pada partition
LUKSini. - Format kesemua logical volumes yang dicipta dan mount ke direktori-direktori berkaitan.
- Jangan lupa untuk mount BOOT & ESP partition juga.
bashpvcreate /dev/mapper/cryptarchvm vgcreate myvg /dev/mapper/cryptarchvm lvcreate -L 10G myvg -n root lvcreate -l +100%FREE myvg -n home mkfs.xfs -L ROOT /dev/myvg/root mkfs.xfs -L HOME /dev/myvg/home mount -m /dev/myvg/root /mnt/arch mount -m /dev/myvg/home /mnt/arch/home mount -m /dev/nvme0n1p2 /mnt/arch/boot mount -m /dev/nvme0n1p1 /mnt/arch/boot/efi
(Btrfs)
- ① Format partition
LUKSitu dan jalankan langkah-langkah berikutnya; ② mount root partition, ③ tambah subvolumesbtrfs, ④ unmount root partitition tersebut sebelum kemudiannya, ⓹ mount kesemua subvolumes berkenaan. - Jangan dilupakan juga untuk mount BOOT & ESP partition.
bashmkfs.btrfs -L ARCH -n 32k /dev/mapper/cryptarchvm mount -m -o defaults,compress=zstd /dev/mapper/cryptarchvm /mnt/arch btrfs subvolume create /mnt/arch/@ btrfs subvolume create /mnt/arch/@home btrfs subvolume create /mnt/arch/@snapshots umount /mnt/arch mount -o defaults,compress=zstd,ssd,subvol=@ /dev/mapper/cryptarchvm /mnt/arch mount -m -o defaults,compress=zstd,ssd,subvol=@home /dev/mapper/cryptarchvm /mnt/arch/home mount -m -o defaults,compress=zstd,ssd,subvol=@snapshots /dev/mapper/cryptarchvm /mnt/arch/.snapshots mount -m -o defaults,compress=zstd,ssd /dev/nvme0n1p2 /mnt/arch/boot mount -m /dev/nvme0n1p1 /mnt/arch/boot/efi
Seterusnya:
- Nyahkomen
ParallelDownloadsdalam/etc/pacman.conf. Muat turun selari ini tidak ditetapkan secara lalai maka perlu di-enabled terlebih dahulu. - Pasang pakej yang berikut ke dalam mounted root partition sebelum menjalankan
arch-chroot:
(LVM2 + XFS)
bashpacstrap -K /mnt/arch base base-devel linux lvm2 xfsprogs vim terminus-font efibootmgr grub amd-ucode gptfdisk openssh(Btrfs)
bashpacstrap -K /mnt/arch base base-devel linux btrfs-progs vim terminus-font efibootmgr grub amd-ucode gptfdisk openssh- Suka juga untuk saya pasang pakej
opensshterus sebab memudahkan saya untuk menyalin fail di antara kedua-dua sistem hos dan tetamu dengan perintahscpmelalui sambunganSSH. linux-firmwaretidak diperlukan dalam VM kerana perkongsian peranti di antara hos dan tetamu.- Saya pasang kodmikro
amdkerana inilah processor komputer riba saya. Sila gantikan denganintel-ucodejika PC / laptop tuan puan didatangkan dengan processor ini.
Jana fstab, arch-chroot ke dalam root partition dan tetapkan zon masa.
bashgenfstab -U /mnt/arch >> /mnt/arch/etc/fstab arch-chroot /mnt/arch ln -sf /usr/share/zoneinfo/Asia/Kuala_Lumpur /etc/localtime hwclock --systohcBenarkan servis penyelarasan masa dan tambah tetapan berikutnya seperti rujukan
ArchWiki.bashsystemctl enable systemd-timesyncd vim /etc/locale.gen #nyahkomen 'locale' yang dikehendaki sebelum jana locale-gen echo 'LANG=en_US.UTF-8' >> /etc/locale.conf echo 'FONT=ter-d22b' >> /etc/vconsole.conf echo 'archlinuxvm' >> /etc/hostnameSunting fail konfig
mkinitcpio./etc/mkinitcpio.conf# (untuk LVM2 + XFS) HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block encrypt lvm2 filesystems fsck) # (untuk Btrfs) BINARIES=(btrfs setfont) HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block encrypt filesystems fsck)Jana imej
kerneldaninitrdserta tetapkan kata laluan untuk root sebelum terus kepada memasang bootloader GRUB di dalam partition ESP.bashmkinitcpio -P passwdSebelum pasang
grub, masukkan arahan tambahan untuk kernel dan nyahkomen baris kedua seperti yang berikutnya./etc/default/grubGRUB_CMDLINE_LINUX="cryptdevice=UUID=<em>UUID-peranti-LUKS</em>:cryptarchvm" GRUB_ENABLE_CRYPTODISK=yPenerangan: OpsyenGRUB_CMDLINE_LINUX="cryptdevice=UUID=d166095a-9b06-4e4a-b4c7-62e6504c3cb9:cryptarchvm"(sebagai contoh) akan membantu menambahkan arahan pada baris kernellinuxdi entri menu secara automatik. Dapatkan UUID partition ketiga yakni /dev/nvme0n1p3 yang telah disulitkan awalnya melalui senarai blok dengan perintahlsblkataupun dengan perintahblkid.
Pasang
grub.bashgrub-install --target=x86_64-efi --efi-directory=/boot/efi --boot-directory=/boot/efi --bootloader-id=GRUB --recheckInstalling for x86_64-efi platform. Installation finished. No error reported.
Akan ada dua direktori dalam
/boot/efi: ① EFI dan juga ② grub. Jana fail konfiggrubdengan perintah berikut. Saya abaikan amaran berkenaanos-proberkerana memang tidak ada menggunakan sistem selainnya.bashgrub-mkconfig -o /boot/efi/grub/grub.cfgGenerating grub configuration file ... Found linux image: /boot/vmlinuz-linux Found initrd image: /boot/amd-ucode.img /boot/initramfs-linux.img Found fallback initrd image(s) in /boot: amd-ucode.img initramfs-linux-fallback.img Warning: os-prober will not be executed to detect other bootable partitions. Systems on them will not be added to the GRUB boot configuration. Check GRUB_DISABLE_OS_PROBER documentation entry. Adding boot menu entry for UEFI Firmware Settings ... done
Contoh output entri menu GRUB:-
1menuentry 'Arch Linux' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-d696445d-15d5-4591-bd60-b7b1d707232e' { 2 load_video 3 set gfxpayload=keep 4 insmod gzio 5 insmod part_gpt 6 insmod btrfs 7 search --no-floppy --fs-uuid --set=root fb49ee31-3c1a-4fee-ac37-6f6b30a4100f 8 echo 'Loading Linux linux ...' 9 linux /vmlinuz-linux root=UUID=d696445d-15d5-4591-bd60-b7b1d707232e rw rootflags=subvol=@ cryptdevice=UUID=d166095a-9b06-4e4a-b4c7-62e6504c3cb9:cryptarchvm loglevel=3 quiet 10 echo 'Loading initial ramdisk ...' 11 initrd /amd-ucode.img /initramfs-linux.img 12}Terdapat tiga bahagian partitions di dalam entri menu GRUB ini iaitu:-
- UUID partition root <
/> pada baris pertama; - UUID partition boot <
/boot> yang mengandungi imejkernelsertainitrdpada baris ketujuh; - UUID partition LUKS <
crypto_LUKS> yakni peranti yang telah disulitkan dengan LUKS2 pada baris kesembilan selepas diarahkan ke partition root.
- UUID partition root <
Sambungan Rangkaian (Network Connection) di dalam Tetamu Arch Linux
Untuk menyambung jaringan di dalam sistem tetamu ini, terdapat dua medium yang menyediakan Resolusi Domain Name (DNS):-
- Dengan
systemd-networkddansystemd-resolvedyang menurutArchWikiialah cara yang paling ringkas untuk VM. Terasa seperti telah ditipu pula sebab berdasarkan pembelajaran sendiri, kaedahnya tak adalah ringkas mana.bashsystemctl enable systemd-networkd systemd-resolved
Selepas beberapa kali menggaru kepala yang tidak gatal mengkaji apa yang tidak cukupnya dengan hanya enabling servis kedua-duanya seperti di atas, saya dapati kena buat langkah-langkah yang dibincangkan di bawah ini dahulu iaitu menyalin beberapa direktori. Perlu keluar daripada arch-chroot dahulu untuk menyalin dan menampal direktori-direktori ini daripada Live CD ke sistem tetamu Arch.
bashexit cp -r /etc/systemd/system/systemd-networkd-wait-online.service.d /mnt/arch/etc/systemd/system cp -r /etc/systemd/network /mnt/arch/etc/systemdATAU
- (Masih di dalam
arch-chroot): Saya rasa, kaedah kedua ini lebih ringkas iaitu dengan menggunakan kliendhcpcd. Pasang pakej ini dan enable sahaja servisnya. Dulu-dulu pun memang cara inilah yang saya aplikasikan. Tetapi sekarang saya cuba untuk membuka hati kepada kebanyakan servissystemdyang ada memandangkan inilah sisteminityang dijadikan sebagai tetapan lalai oleh pengurusan sistem utama saya ini.bashpacman -S dhcpcd systemctl enable dhcpcd exit
Sekarang, bolehlah unmount (--recursive) dan cuba reboot untuk melihat sama ada sistem berjaya boot atau tidak:
bashumount -R /mnt/arch rebootSetelah berjaya boot, symlink-kan fail
stub-resolv.confke/etc/resolv.conf(hanya seandainya menggunakan servissystemd-resolveduntuk memperoleh Resolusi Domain Name sebagaimana yang telah saya terangkan di atas. Sekiranya menggunakan kliendhcpcd, langkau perkara ini);bashln -rsf /run/systemd/resolve/stub-resolv.conf /etc/resolv.confSerta semak status timedatectl bagi memastikan bahawa masa dan tarikh telah diselaraskan mengikut zon masa dan lokaliti kita. Contoh output:-
bashtimedatectlLocal time: Tue 2022-06-28 18:05:45 +08 Universal time: Tue 2022-06-28 10:05:45 UTC RTC time: Tue 2022-06-28 10:05:45 Time zone: Asia/Kuala_Lumpur (+08, +0800) System clock synchronized: yes NTP service: active RTC in local TZ: noJangan lupa ping mana-mana url untuk memastikan sambungan jaringan berjaya diperolehi.
Katakanlah kita sudah menggunakan opsyen pertama tetapi mahu beralih kepada
dhcpcd, buat langkah-langkah di bawah sebagai root (pastikan pakej dhcpcd sudah dipasang terlebih dahulu sebelum menjalankan ini).bashunlink /etc/resolv.conf systemctl stop systemd-resolved systemd-networkd systemctl disable systemd-resolved systemd-networkd systemctl enable --now dhcpcd
F2 semasa mula boot untuk ke paparan UEFI Firmware Settings dan pergi ke bahagian berikut seperti yang ditunjukkan melalui imej-imej di bawah:-

Xorg dalam VM Arch Linux
- Sudah pastinya akan ada sedikit kelainan dalam settings untuk paparan
Xorgdi antara sistem VM dengan sistem sebenar. Begitu juga terdapat beberapa pakej / perkara yang boleh dilangkau apabila di dalam VM dek perkongsian peranti di antara keduanya. - Antara pakej-pakej / benda yang TIDAK memerlukan konfigurasi ialah:
- Pakej pengurus untuk sambungan jaringan tanpa wayar (WiFi) seperti
iwd,NetworkManagerdan lain-lain. xf86-video-driveruntuk grafik kerana VM menggunakan GPUvirtioyang dikesan secara automatik.
- Pakej pengurus untuk sambungan jaringan tanpa wayar (WiFi) seperti
Contoh grafik dengan Desktop Environment XFCE4
(Sebagai root):
Pakej-pakej di bawah melibatkan penggunaan
touchpad, sebahagian pakej daripada grupxorg, ejenspicebagi kemudahan copy paste antara kedua-dua sistem dan pakejxseluntuk clipboard (pakej alternatif ialahxclip) sertaxcompmgrsebagai pengurus komposit.bashpacman -Syu xf86-input-libinput xorg-server xorg-apps xorg-xinit xfce4 spice-vdagent qemu-guest-agent xsel xcompmgrBuat konfigurasi
Xorguntuk disalin fail konfignya ke direktori/etc/X11.bashXorg -configure cp xorg.conf.new /etc/X11/xorg.conf
(Sebagai pengguna) ~Tambah user dengan arahan useradd dan masukkan namanya ke dalam fail sudoers (visudo):
Salin fail
xinitrcke direktori rumah pengguna dan jadikan fail berkenaan boleh dilaksanakan (executable).bashcp /etc/X11/xinit/xinitrc .xinitrc chmod +rx .xinitrcSunting fail
.xinitrcitu di bahagian paling bawah sekali dan komen baris-baris yang tidak berkenaan:~/.xinitrcxcompmgr -c & exec startxfce4Dan mulakan
Xorg.bashstartx
Tips
spice-vdagent dijalankan secara automatik di dalam Desktop Environments. Seandainya hanya menggunakan Window Manager, spice-vdagent ini perlu dilaksanakan. Boleh tambah “spice-vdagent &” sebelum baris “exec window-manager” di dalam fail .xinitrc untuk mengaktifkan kemudahan copy paste di antara sistem hos dan tetamu.
