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
:bash
setfont ter-d22b
Boleh ubah22
kepada24
/28
/32
jika mahukan tulisan konsol yang lebih besar daripada itu. Lokasi tulisan-tulisan konsol adalah di dalam direktori/usr/share/kbd/consolefonts
.Dapatkan senarai blok pemacu:
bash
alias lsblk="lsblk -o NAME,FSTYPE,SIZE,UUID,LABEL,MOUNTPOINTS" lsblk
1. Susun atur untuk (LVM2 + XFS) dalam LUKS2:

/dev/mapper/myvg-root = /dev/myvg/root
/dev/mapper/myvg-home = /dev/myvg/home
2. 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):
bash
gdisk /dev/nvme0n1
Command (? 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
ESP
yang akan menempatkan bootloaderEFI
(saya guna GRUB2):bash
mkfs.fat -F 32 -n ESP /dev/nvme0n1p1
Format partition
BOOT
(mengikut format masing-masing).(LVM2 + XFS)
bash
mkfs.xfs -L BOOT /dev/nvme0n1p2
(Btrfs)
bash
mkfs.btrfs -L BOOT -n 32k /dev/nvme0n1p2
Kenapa tidak partition/boot
itu disimpan di dalam partition/
(root) sahaja?- Jawapannya adalah kerana sokongan bootloader GRUB2 terhadap partition
/boot
yang disulitkan denganLUKS2
adalah terhad.LUKS1
tidak mempunyai limitasi ini namun saya tidak memilihnya keranaLUKS2
ini adalah format terkini yang dibangunkan dengan ciri-ciri yang lebih baik. - Ada kaedahnya jika mahu juga setup
/boot
ini di dalam partition root dengan penyulitan berformatkan LUKS2, tetapi perlu rajin untuk mengaplikasikan kaedah tambahan yang telah diubahsuai supayagrub
dapat mengesan dan membaca kernel. Rujuk [ArchWiki | GRUB#LUKS2] untuk keterangan lanjut.
- Jawapannya adalah kerana sokongan bootloader GRUB2 terhadap partition
Encrypt partition ketiga.
bash
cryptsetup luksFormat /dev/nvme0n1p3
WARNING! ======== 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.bash
cryptsetup open /dev/nvme0n1p3 cryptarchvm
Enter 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
LUKS
ini. - Format kesemua logical volumes yang dicipta dan mount ke direktori-direktori berkaitan.
- Jangan lupa untuk mount BOOT & ESP partition juga.
bash
pvcreate /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
LUKS
itu 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.
bash
mkfs.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
ParallelDownloads
dalam/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)
bash
pacstrap -K /mnt/arch base base-devel linux lvm2 xfsprogs vim terminus-font efibootmgr grub amd-ucode gptfdisk openssh
(Btrfs)
bash
pacstrap -K /mnt/arch base base-devel linux btrfs-progs vim terminus-font efibootmgr grub amd-ucode gptfdisk openssh
- Suka juga untuk saya pasang pakej
openssh
terus sebab memudahkan saya untuk menyalin fail di antara kedua-dua sistem hos dan tetamu dengan perintahscp
melalui sambunganSSH
. linux-firmware
tidak diperlukan dalam VM kerana perkongsian peranti di antara hos dan tetamu.- Saya pasang kodmikro
amd
kerana inilah processor komputer riba saya. Sila gantikan denganintel-ucode
jika PC / laptop tuan puan didatangkan dengan processor ini.
Jana fstab, arch-chroot ke dalam root partition dan tetapkan zon masa.
bash
genfstab -U /mnt/arch >> /mnt/arch/etc/fstab arch-chroot /mnt/arch ln -sf /usr/share/zoneinfo/Asia/Kuala_Lumpur /etc/localtime hwclock --systohc
Benarkan servis penyelarasan masa dan tambah tetapan berikutnya seperti rujukan
ArchWiki
.bash
systemctl enable systemd-timesyncd.service 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/hostname
Sunting 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
kernel
daninitrd
serta tetapkan kata laluan untuk root sebelum terus kepada memasang bootloader GRUB di dalam partition ESP.bash
mkinitcpio -P passwd
Sebelum pasang
grub
, masukkan arahan tambahan untuk kernel dan nyahkomen baris kedua seperti yang berikutnya./etc/default/grub
GRUB_CMDLINE_LINUX="cryptdevice=UUID=<em>UUID-peranti-LUKS</em>:cryptarchvm" GRUB_ENABLE_CRYPTODISK=y
Penerangan: OpsyenGRUB_CMDLINE_LINUX="cryptdevice=UUID=d166095a-9b06-4e4a-b4c7-62e6504c3cb9:cryptarchvm"
(sebagai contoh) akan membantu menambahkan arahan pada baris kernellinux
di entri menu secara automatik. Dapatkan UUID partition ketiga yakni /dev/nvme0n1p3 yang telah disulitkan awalnya melalui senarai blok dengan perintahlsblk
ataupun dengan perintahblkid
.Pasang
grub
.bash
grub-install --target=x86_64-efi --efi-directory=/boot/efi --boot-directory=/boot/efi --bootloader-id=GRUB --recheck
Installing for x86_64-efi platform. Installation finished. No error reported.
Akan ada dua direktori dalam
/boot/efi
: ① EFI dan juga ② grub. Jana fail konfiggrub
dengan perintah berikut. Saya abaikan amaran berkenaanos-prober
kerana memang tidak ada menggunakan sistem selainnya.bash
grub-mkconfig -o /boot/efi/grub/grub.cfg
Generating 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 imejkernel
sertainitrd
pada 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-networkd
dansystemd-resolved
yang menurutArchWiki
ialah cara yang paling ringkas untuk VM. Terasa seperti telah ditipu pula sebab berdasarkan pembelajaran sendiri, kaedahnya tak adalah ringkas mana.bash
systemctl enable systemd-networkd.service systemctl enable systemd-resolved.service
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.
bash
exit cp -r /etc/systemd/system/systemd-networkd-wait-online.service.d /mnt/arch/etc/systemd/system cp -r /etc/systemd/network /mnt/arch/etc/systemd
ATAU
- (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 servissystemd
yang ada memandangkan inilah sisteminit
yang dijadikan sebagai tetapan lalai oleh pengurusan sistem utama saya ini.bash
pacman -S dhcpcd systemctl enable dhcpcd.service exit
Sekarang, bolehlah unmount (--recursive) dan cuba reboot untuk melihat sama ada sistem berjaya boot atau tidak:
bash
umount -R /mnt/arch reboot
Setelah berjaya boot, symlink-kan fail
stub-resolv.conf
ke/etc/resolv.conf
(hanya seandainya menggunakan servissystemd-resolved
untuk memperoleh Resolusi Domain Name sebagaimana yang telah saya terangkan di atas. Sekiranya menggunakan kliendhcpcd
, langkau perkara ini);bash
ln -rsf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
Serta semak status timedatectl bagi memastikan bahawa masa dan tarikh telah diselaraskan mengikut zon masa dan lokaliti kita. Contoh output:-
bash
timedatectl
Local 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: no
Jangan 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).bash
unlink /etc/resolv.conf systemctl stop systemd-resolved.service systemctl stop systemd-networkd.service systemctl disable systemd-resolved.service systemctl disable systemd-networkd.service systemctl enable --now dhcpcd.service
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
Xorg
di 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
,NetworkManager
dan lain-lain. xf86-video-driver
untuk grafik kerana VM menggunakan GPUvirtio
yang 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
, ejenspice
bagi kemudahan copy paste antara kedua-dua sistem dan pakejxsel
untuk clipboard (pakej alternatif ialahxclip
) sertaxcompmgr
sebagai pengurus komposit.bash
pacman -Syu xf86-input-libinput xorg-server xorg-apps xorg-xinit xfce4 spice-vdagent qemu-guest-agent xsel xcompmgr
Buat konfigurasi
Xorg
untuk disalin fail konfignya ke direktori/etc/X11
.bash
Xorg -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
xinitrc
ke direktori rumah pengguna dan jadikan fail berkenaan boleh dilaksanakan (executable).bash
cp /etc/X11/xinit/xinitrc .xinitrc chmod +rx .xinitrc
Sunting fail
.xinitrc
itu di bahagian paling bawah sekali dan komen baris-baris yang tidak berkenaan:~/.xinitrc
xcompmgr -c & exec startxfce4
Dan mulakan
Xorg
.bash
startx
Tip:
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.