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
.
dd if=/dev/zero of=disk.img bs=256M count=10
10+0 records in 10+0 records out 2684354560 bytes (2.7 GB, 2.5 GiB) copied, 2.73313 s, 982 MB/s
losetup
untuk set up peranti loop
dari imej yang terhasil di atas:losetup -f --show disk.img
dev/loop0 (contoh output)
loop
daripada arahan #2 di atas):mkfs.ext4 -L TEST /dev/loop0
/mnt/tmp
(opsyen -m
adalah untuk mencipta direktori berkenaan sekiranya belum ada):mount -m /dev/loop0 /mnt/tmp
pacstrap
:pacstrap -K /mnt/tmp base
cd
ke dalam direktori dan mount sistem fail API yang diperlukan:cd /mnt/tmp
mount -t proc /proc proc/
mount -t sysfs /sys sys/
mount -o bind /dev dev/
mount -o bind /run run/
Chroot
:chroot /mnt/tmp /bin/bash
lsblk
sebagaimana sebelumnya:lsblk -o NAME,FSTYPE,SIZE,UUID,LABEL,MOUNTPOINTS
chroot
, unmount (--lazy), dan pisahkan (detach) peranti loop
ini:exit
umount -l /mnt/tmp
losetup -d /dev/loop0
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.
/mnt/tmp
):/dev/mapper/cryptarch
, iaitu peranti blok LUKS
yang menempatkan sistem hos Arch
saya ini);mount -o defaults,compress=zstd,ssd /dev/mapper/cryptarch /mnt/tmp
btrfs
e.g. @dummy_arch
;btrfs subvolume c /mnt/tmp/@dummy_arch
/var/lib
serta tambahkan subvolume machines
dan portables
;mkdir -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/portables
Hal ini adalah untuk mengelakkan daripada serabut mata melihatkan ralat di bawah selepas melaksanakan perintah pacstrap
nanti (walaubagaimanapun pepijat systemd
ini 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
umount /mnt/tmp
mount -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/portables
Ulangi langkah bernombor 5 sehingga 8 dari penerangan tentang RAW disk di atas.
Apabila selesai, keluar dari chroot
dan unmount (--lazy):
exit
umount -l /mnt/tmp
@dummy_arch
):btrfs 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
btrfs 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:
btrfs 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_arch
berkenaan mempunyai fail / direktori lain di dalamnya.
Oleh yang demikian, pastikan memadam kandungan-kandungan ini terlebih dahulu sebelum membuang subvolume utama.
btrfs subvolume d -i 935 /
Delete subvolume (no-commit): '//@dummy_arch/var/lib/machines'