Eksperimen: Imitasi Arch Linux (Dummy System)
Untuk Tujuan Pembelajaran Sahaja
Dari semasa ke semasa, saya menyemak tatacara yang masih relevan dalam pemasangan distribusi atau sistem operasi seperti Arch. Jika terdapat sebarang perubahan, mestilah dikemaskini maklumat dan perkembangannya.
Terbaharu, saya dapati terdapat sedikit isu dalam penggunaan arch-chroot. Arahan lsblk dengan opsyen output seperti ‘FSTYPE, UUID dan LABEL’ tidak memaparkan tanda-tanda atau maklumat blok yang ada. Begini gambarannya:-

Barangkali, adanya pepijat (bugs) dalam arch-chroot yang terkini sehingga menyebabkan fail sistem (API filesystems) yang diperlukan tidak lagi mounted secara automatik.
Maka saya usahakan mencari cara yang lebih mudah dan cepat sebagai eksperimen untuk menggantikannya dengan chroot tanpa perlu boot LIVE CD atau sebarang VM.
Caranya adalah dengan mencipta blok dami (dummy) melalui peranti loop.
arch-chroot semula untuk tujuan ini.Sebagai root:
Buat imej RAW disk bersaiz 2.5 GiB (pemasangan asas sistem Arch Linux memakan kurang daripada 2 GiB ruang cakera):
bashdd if=/dev/zero of=disk.img bs=256M count=1010+0 records in 10+0 records out 2684354560 bytes (2.7 GB, 2.5 GiB) copied, 2.73313 s, 982 MB/s
Gunakan perintah
losetupuntuk set up perantiloopdari imej yang terhasil di atas:bashlosetup -f --show disk.imgdev/loop0 (contoh output)
Format blok ini (berdasarkan output peranti
loopdaripada arahan #2 di atas):bashmkfs.ext4 -L TEST /dev/loop0Mount ke direktori yang dihajati e.g.
/mnt/tmp(opsyen-madalah untuk mencipta direktori berkenaan sekiranya belum ada):bashmount -m /dev/loop0 /mnt/tmpPasang pakej asas melalui
pacstrap:bashpacstrap -K /mnt/tmp basecdke dalam direktori dan mount sistem fail API yang diperlukan:bashcd /mnt/tmp mount -t proc /proc proc/ mount -t sysfs /sys sys/ mount -o bind /dev dev/ mount -o bind /run run/Chroot:bashchroot /mnt/tmp /bin/bashJalankan perintah
lsblksebagaimana sebelumnya:bashlsblk -o NAME,FSTYPE,SIZE,UUID,LABEL,MOUNTPOINTSMaklumat (tags) blok loopseperti 'FSTYPE,UUID dan LABEL' kini terpapar.
Keluar dari
chroot, unmount (--lazy), dan pisahkan (detach) perantiloopini:bashexit umount -l /mnt/tmp losetup -d /dev/loop0Selesai.
Dengan Btrfs
Oh ya, memandangkan saya menggunakan sistem fail Btrfs, saya boleh cipta subvolume baru dan mount-nya dalam usaha untuk memperolehi matlamat yang sama sebagaimana di atas.
Menggunakan mountpoint yang sama yakni (/mnt/tmp):
Mount root partition (e.g.
/dev/mapper/cryptarch, iaitu peranti blokLUKSyang menempatkan sistem hosArchsaya ini);bashmount -o defaults,compress=zstd,ssd /dev/mapper/cryptarch /mnt/tmpTambah subvolume
btrfse.g.@dummy_arch;bashbtrfs subvolume c /mnt/tmp/@dummy_arch(Optional) seandainya rajin, buat direktori
/var/libserta tambahkan subvolumemachinesdanportables;bashmkdir -p /mnt/tmp/@dummy_arch/var/lib btrfs subvolume c /mnt/tmp/@dummy_arch/var/lib/machines btrfs subvolume c /mnt/tmp/@dummy_arch/var/lib/portablesHal ini adalah untuk mengelakkan daripada serabut mata melihatkan ralat di bawah selepas melaksanakan perintah
pacstrapnanti (meskipun begitu, pepijatsystemdini selamat untuk dibiarkan berdasarkan bacaan saya);Failed to adjust quota for subvolume "/var/lib/portables": Bad file descriptor Failed to adjust quota for subvolume "/var/lib/machines": Bad file descriptor
Unmount kembali root partitition sebelum langkah seterusnya;
bashumount /mnt/tmpMount subvolume yang dicipta tadi (baris kedua dan ketiga adalah pilihan, seandainya langkah optional yang diterangkan di atas diaplikasikan).
bashmount -o defaults,compress=zstd,ssd,subvol=@dummy_arch /dev/mapper/cryptarch /mnt/tmp mount -o defaults,compress=zstd,ssd,subvol=@dummy_arch/var/lib/machines /dev/mapper/cryptarch /mnt/tmp/var/lib/machines mount -o defaults,compress=zstd,ssd,subvol=@dummy_arch/var/lib/portables /dev/mapper/cryptarch /mnt/tmp/var/lib/portablesUlangi langkah bernombor 5 sehingga 8 dari penerangan tentang RAW disk di atas.
Apabila selesai, keluar dari
chrootdan unmount (--lazy):bashexit umount -l /mnt/tmpJikalau tidak ingin menyimpan subvolume ini lagi dan mahu membuangnya, dapatkan senarai kesemua subvolumes yang berkaitan (i.e.
@dummy_arch):bashbtrfs subvolume l /# Sampel pengeluaran: ID 933 gen 291364 top level 5 path @dummy_arch ID 934 gen 291359 top level 933 path @dummy_arch/var/lib/portables ID 935 gen 291360 top level 933 path @dummy_arch/var/lib/machines
Padam subvolumes tersebut melalui ID masing-masing:
bashbtrfs subvolume d -i subvolume_ID /Berbanding dengan menggunakan nama (laluan) subvolume i.e.
@dummy_arch, kaedah ini dapat mengelakkan ralat yang memaparkan bahawa subvolume ini tidak wujud.ERROR: Could not statfs: No such file or directory
Misalannya dengan mengambil ID subvolume utama daripada output arahan di atas:
bashbtrfs subvolume d -i 933 /Delete subvolume (no-commit): '//@dummy_arch' ERROR: Could not destroy subvolume/snapshot: Directory not empty
Ralat ini terjadi adalah kerana subvolume
@dummy_archberkenaan mempunyai fail / direktori lain di dalamnya.Oleh yang demikian, pastikan memadam kandungan-kandungan ini terlebih dahulu sebelum membuang subvolume utama.
bashbtrfs subvolume d -i 935 /Delete subvolume (no-commit): '//@dummy_arch/var/lib/machines'
Selesai.
