Ако не сте чели предната статия за инсталиране на Arch на UEFI и ext4, непременно го направете. Това по-опростен вариант на това което ще правим тук. Ето и линк: https://tlan.net/menu/linux/arch/install_ext4/install_ext4.php Тук ще усложним задачата. Ще използваме файлова система BTRFS. Много спорна, казват не много надеждна но лично аз съм нямал проблеми с нея, а и работи много бързо. Разбира се изисква по здрава машина и диск който да е SSD. Ако имате SATA то няма смисъл да използвате BTRFS. Отново трябва да имате ISO образа за да можете да направите инсталация. Ако нямате, изтеглете го примерно от: https://mirror.telepoint.bg/archlinux/iso/, или от оригиналния сайт на:https://archlinux.org/download/. В оригиналния има линкове към множество сайтове на различни държави и всички могат да се ползват. Но да се върнем на нашия. Гледате коя е последната версия. В моя случай на текущия момент е 2025.05.01. Влизаме там и теглим https://mirror.telepoint.bg/archlinux/iso/2025.05.01/archlinux-2025.05.01-x86_64.iso. Имаме ISO файла и го правим на инсталационна флашка, диск или там каквото ползвате. В случая ще го ползвам във виртуална машина. Виртуалната машина е със следните параметри: CPU: 4 ядра RAM: 4096MB HDD: 55GB BIOS: UEFI Стартираме виртуалната машина.
Първото меню е за стартиране на инсталацията.
От горния екран виждаме, че трябва да имаме Интернет на системата за да може да продължим с инсталацията. За целта можем да ползваме iwctl, ако ползваме WiFi за връзка или mmcli, ако ползваме модем. В нашия случай ползваме Ethernet с DHCP и не трябва да настройваме нищо, но проверка ще направим чрез ping.
ping dir.bg Pinging dir.bg [172.67.71.201] with 32 bytes of data: 64 bytes from 172.67.71.201: icmp_seq=1 ttl=06 time=13.5 ms 64 bytes from 172.67.71.201: icmp_seq=2 ttl=06 time=14.2 ms 64 bytes from 172.67.71.201: icmp_seq=3 ttl=06 time=14.5 ms 64 bytes from 172.67.71.201: icmp_seq=4 ttl=06 time=13.7 ms
Интернет имаме, може да продължим с инсталацията. Между другото да сменим шрифта, че е много ситен.
cd /usr/share/kbd/consolefonts ls setfont ter-128n setfont ter-v32n setfont ter-v22n find / |grep ter-128n
Ще покажа начин как да инсталирате системата ползвайки терминален прозорец. Проблема е, че root няма парола и не може да се достигне през него до машината която инсталираме.
### Даваме парола на главния потребител passwd New password: NewPa$$ Retype new password: NewPa$$ passwd: password updated successfully ### Проверяваме IP адреса на мрежовия интерфейс. ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host noprefixroute valid_lft forever preferred_lft forever 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 08:00:27:f7:16:ce brd ff:ff:ff:ff:ff:ff altname enx080027f716ce inet 192.168.11.83/24 metric 100 brd 192.168.11.255 scope global dynamic enp0s3 valid_lft 84948sec preferred_lft 84948sec inet6 fe80::a00:27ff:fef7:16ce/64 scope link proto kernel_ll valid_lft forever preferred_lft forever
Вече можем да се подключим към системата през SSH.
Да проверим какви дискове имаме и какви дялове.
lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 846.7M 1 loop /run/archiso/airootfs sr0 11:0 1 1.2G 0 rom /run/archiso/bootmnt nvme0n1 259:0 0 55G 0 disk
Имаме 1 диск nvme0n1 с размер 55GB. Да го занулим. Да премахнем всичко от него, примерно ако е имал някакви дялове и тип на диска.
wipefs --all /dev/nvme0n1
Да го проверим сега.
fdisk -l /dev/nvme0n1 Disk /dev/nvme0n1: 55 GiB, 59055800320 bytes, 115343360 sectors Disk model: VMware Virtual NVMe Disk Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes
Освен размера на диска, нищо друго не се вижда. Значи е чист. Да го дефинираме. Диска трябва да бъде във формат GPT. Ще му създадем следните дялове: EFI: 523MB ОСНОВЕН: всичкото свободно останало място
cfdisk /dev/nvme0n1
Дефинираме диска като gpt. Все пак ползваме UEFI.
Създаваме първи дял.
Размера му е 512MB.
Дяла ще се ползва за EFI.
Създаваме втори дял за SWAP.
Размера му е 6GB. Ако ползвате хибернация, то SWAP дяла трябва да е 1.5 пъти по-голям от оперативната памет (4G x 1.5 = 6G).
Дефинираме дяла да е за SWAP.
Останалото свободно място го дефинираме за самата операционна система. Всички основни файлове ще са тук.
Оставяме дяла да бъде Linux filesystem. Записваме текущата конфигурация на диска.
Съгласяваме се с това което сме създали и пишем yes за потвърждение на конфигурацията.
Излизаме от конфигурацията на диска. Тук повече няма какво да правим. Да проверим какво имаме до тук.
fdisk -l /dev/nvme0n1 Disk /dev/nvme0n1: 55 GiB, 59055800320 bytes, 115343360 sectors Disk model: VMware Virtual NVMe Disk Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: 0FC7659E-2C1A-4DE7-A53B-DDBA126F8AD7 Device Start End Sectors Size Type /dev/nvme0n1p1 2048 1050623 1048576 512M EFI System /dev/nvme0n1p2 1050624 13633535 12582912 6G Linux swap /dev/nvme0n1p3 13633536 115341311 101707776 48.5G Linux filesystem lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 846.7M 1 loop /run/archiso/airootfs sr0 11:0 1 1.2G 0 rom /run/archiso/bootmnt nvme0n1 259:0 0 55G 0 disk ├─nvme0n1p1 259:1 0 512M 0 part ├─nvme0n1p2 259:2 0 6G 0 part └─nvme0n1p3 259:3 0 48.5G 0 part
Всичко правилно е дефинирано. Да форматираме дяловете за да можем да ги ползваме. Започваме отзад и ще продължим до EFI. Казахме, че ще ползваме файлова система btrfs.
mkfs.btrfs -f /dev/nvme0n1p3 btrfs-progs v6.14 See https://btrfs.readthedocs.io for more information. Performing full device TRIM /dev/nvme0n1p3 (48.50GiB) ... NOTE: several default settings have changed in version 5.15, please make sure this does not affect your deployments: - DUP for metadata (-m dup) - enabled no-holes (-O no-holes) - enabled free-space-tree (-R free-space-tree) Label: (null) UUID: f9c7549c-214d-4667-a9d2-d76677627558 Node size: 16384 Sector size: 4096 (CPU page size: 4096) Filesystem size: 48.50GiB Block group profiles: Data: single 8.00MiB Metadata: DUP 256.00MiB System: DUP 8.00MiB SSD detected: yes Zoned device: no Features: extref, skinny-metadata, no-holes, free-space-tree Checksum: crc32c Number of devices: 1 Devices: ID SIZE PATH 1 48.50GiB /dev/nvme0n1p3
Втория дял казахме, че ще е за SWAP.
mkswap /dev/nvme0n1p2 Setting up swapspace version 1, size = 6 GiB (6442446848 bytes) no label, UUID=3d869a39-117c-4ab9-866a-45348b5adf78
Да активираме SWAPA.
swapon /dev/nvme0n1p2
Забележете, създадохме цял дял за SWAP. Можехме да ползваме и други варианти, примерно да е файл или ZRAM. Ако ползваме последните два метода няма да можем да правим моментни снимки на системата. По-точно ще можем, но се усложнява задачата. Когато SWAP-a е във вид на дял то моментната снимка става много лесно при BTRFS. Накрая да форматираме първия дял за EFI.
mkfs.vfat -F32 /dev/nvme0n1p1 mkfs.fat 4.2 (2021-01-31)
Всички дялове са форматирани и готови за употреба. Сега трябва да монтираме някъде дяловете които създадохме за да ги ползваме. Започваме с /dev/nvme0n1p3. Да го монтираме в папка /mnt.
mount /dev/nvme0n1p3 /mnt lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 846.7M 1 loop /run/archiso/airootfs sr0 11:0 1 1.2G 0 rom /run/archiso/bootmnt nvme0n1 259:0 0 55G 0 disk ├─nvme0n1p1 259:1 0 512M 0 part ├─nvme0n1p2 259:2 0 6G 0 part [SWAP] └─nvme0n1p3 259:3 0 48.5G 0 part /mnt
До тук всичко е наред. В папката /mnt трябва да създадем няколко под тома. Под томовете също се наричат subvolume. Единия ще е за системата а другия за потребителите и последния за моментни снимки.
btrfs subvolume create /mnt/@ Create subvolume '/mnt/@' btrfs subvolume create /mnt/@home Create subvolume '/mnt/@home' btrfs subvolume create /mnt/@snapshots Create subvolume '/mnt/@snapshots' btrfs su li /mnt ID 256 gen 10 top level 5 path @ ID 257 gen 10 top level 5 path @home ID 258 gen 10 top level 5 path @snapshots
Връщаме се обратно в папката по подразбиране. В случая е /root.
cd
Размонтирваме папка /mnt.
umount /mnt -R
Сега вече ще монтираме в /mnt subvolume които създадохме. Първо монтираме subvoluma на корена, след това този за потребителите и накрая за моментните снимки.
mount -o rw,noatime,compress=zstd:3,ssd,ssd_spread,discard=async,space_cache=v2,subvol=/@ /dev/nvme0n1p3 /mnt mount |grep mnt /dev/sr0 on /run/archiso/bootmnt type iso9660 (ro,relatime,nojoliet,check=s,map=n,blocksize=2048,iocharset=utf8,x-initrd.mount) /dev/nvme0n1p3 on /mnt type btrfs (rw,noatime,compress=zstd:3,ssd_spread,discard=async,space_cache=v2,subvolid=256,subvol=/@) mount |grep /mnt /dev/nvme0n1p3 on /mnt type btrfs (rw,noatime,compress=zstd:3,ssd_spread,discard=async,space_cache=v2,subvolid=256,subvol=/@)
Основния субволюм е монтиран. В него ще се намират /@home и @snapshots Да създадем папки където ще се монтират горе указаните субволюми.
mkdir /mnt/{home,.snapshots}
Вече можем да монтираме и другите два субволюма.
mount -o rw,noatime,compress=zstd:3,ssd,ssd_spread,discard=async,space_cache=v2,subvol=/@home /dev/nvme0n1p3 /mnt/home mount -o rw,noatime,compress=zstd:3,ssd,ssd_spread,discard=async,space_cache=v2,subvol=/@snapshots /dev/nvme0n1p3 /mnt/.snapshots mount |grep /mnt /dev/nvme0n1p3 on /mnt type btrfs (rw,noatime,compress=zstd:3,ssd_spread,discard=async,space_cache=v2,subvolid=256,subvol=/@) /dev/nvme0n1p3 on /mnt/home type btrfs (rw,noatime,compress=zstd:3,ssd_spread,discard=async,space_cache=v2,subvolid=257,subvol=/@home) /dev/nvme0n1p3 on /mnt/.snapshots type btrfs (rw,noatime,compress=zstd:3,ssd_spread,discard=async,space_cache=v2,subvolid=258,subvol=/@snapshots)
Да създадем папка boot. В нея ще монтираме EFI дяла.
mkdir -p /mnt/boot mount /dev/nvme0n1p1 /mnt/boot
Да проверим.
lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 846.7M 1 loop /run/archiso/airootfs sr0 11:0 1 1.2G 0 rom /run/archiso/bootmnt nvme0n1 259:0 0 55G 0 disk ├─nvme0n1p1 259:1 0 512M 0 part /mnt/boot ├─nvme0n1p2 259:2 0 6G 0 part [SWAP] └─nvme0n1p3 259:3 0 48.5G 0 part /mnt/.snapshots /mnt/home /mnt
Всички дялове които ни трябват са монтирани. Готови сме да инсталираме системата на указаните от нас дялове.
pacstrap /mnt base linux linux-firmware btrfs-progs bash-completion nano ==> Initcpio image generation successful (13/15) Reloading system bus configuration... Skipped: Running in chroot. (14/15) Checking for old perl modules... (15/15) Updating the info directory file... pacstrap /mnt base linux linux-firmware nano btrfs-progs 22.25s user 48.13s system 63% cpu 1:50.95 total
base - базови компоненти на системата linux - ядро на linux linux-firmware - файлов фърмуер на Linux, драйвери на ядрото за мрежови устройства, видеокарти и т.н. btrfs-progs - за нормална работа на файловата система btrfs bash-completion - автоматично допълване на командите в шела BASH nano - конзолен текстов редактор Генерираме точки на монтиране и ги записваме във файла fstab.
genfstab -U /mnt # /dev/nvme0n1p3 UUID=f9c7549c-214d-4667-a9d2-d76677627558 / btrfs rw,noatime,compress=zstd:3,ssd_spread,discard=async,space_cache=v2,subvol=/@ 0 0 # /dev/nvme0n1p3 UUID=f9c7549c-214d-4667-a9d2-d76677627558 /home btrfs rw,noatime,compress=zstd:3,ssd_spread,discard=async,space_cache=v2,subvol=/@home 0 0 # /dev/nvme0n1p3 UUID=f9c7549c-214d-4667-a9d2-d76677627558 /.snapshots btrfs rw,noatime,compress=zstd:3,ssd_spread,discard=async,space_cache=v2,subvol=/@snapshots 0 0 # /dev/nvme0n1p1 UUID=96FD-9224 /boot vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 2 # /dev/nvme0n1p2 UUID=3d869a39-117c-4ab9-866a-45348b5adf78 none swap defaults 0 0 genfstab -U /mnt >> /mnt/etc/fstab cat /mnt/etc/fstab # Static information about the filesystems. # See fstab(5) for details. # <file system> <dir> <type> <options> <dump> <pass> # /dev/nvme0n1p3 UUID=f9c7549c-214d-4667-a9d2-d76677627558 / btrfs rw,noatime,compress=zstd:3,ssd_spread,discard=async,space_cache=v2,subvol=/@ 0 0 # /dev/nvme0n1p3 UUID=f9c7549c-214d-4667-a9d2-d76677627558 /home btrfs rw,noatime,compress=zstd:3,ssd_spread,discard=async,space_cache=v2,subvol=/@home 0 0 # /dev/nvme0n1p3 UUID=f9c7549c-214d-4667-a9d2-d76677627558 /.snapshots btrfs rw,noatime,compress=zstd:3,ssd_spread,discard=async,space_cache=v2,subvol=/@snapshots 0 0 # /dev/nvme0n1p1 UUID=96FD-9224 /boot vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 2 # /dev/nvme0n1p2 UUID=3d869a39-117c-4ab9-866a-45348b5adf78 none swap defaults 0 0
Системата е инсталирана. Точките за монтиране са описани.
Сменяме корена на системата. Вече няма да е /mnt/, а ще е /
arch-chroot /mnt
Вече корена на системата ни е /. Да проверим.
ls bin dev home lib64 opt root sbin sys usr boot etc lib mnt proc run srv tmp var lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 846.7M 1 loop sr0 11:0 1 1.2G 0 rom nvme0n1 259:0 0 55G 0 disk ├─nvme0n1p1 259:1 0 512M 0 part /boot ├─nvme0n1p2 259:2 0 6G 0 part [SWAP] └─nvme0n1p3 259:3 0 48.5G 0 part /.snapshots /home /
Забележете, точките на монтиране вече не са в /mnt
Първо ще покажа как да се направи от командния ред, после ще покажа как се прави през текстовия редактор. Дефиниране часовия пояс и синхронизиране на локалния часовник.
ln -sf /usr/share/zoneinfo/Europe/Sofia /etc/localtime hwclock --systohc
Да проверим:
date Sat May 31 16:53:42 UTC 2025
Дефиниране езика за ползване в системата.
echo "bg_BG.UTF-8 UTF-8" >> /etc/locale.gen echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen cat /etc/locale.gen ................................. #zh_TW BIG5 #zu_ZA.UTF-8 UTF-8 #zu_ZA ISO-8859-1 bg_BG.UTF-8 UTF-8 en_US.UTF-8 UTF-8
Дефинирахме езика който ще ползва системата. Да генерираме локалните настройки които указахме по-горе.
locale-gen Generating locales... bg_BG.UTF-8... done en_US.UTF-8... done Generation complete.
Да създадем конфигурационен файл указващ езика който ще показва системата ни.
echo LANG=en_US.UTF-8 > /etc/locale.conf export LANG=en_US.UTF-8
Ползваме език за показване на системата Английски, Българския понякога прави проблеми. Сега да покажем горните команди чрез текстов редактор. Започваме с регионалните настройки. Указваме регион и език на системата.
nano /etc/locale.gen #bg_BG.UTF-8 UTF-8 bg_BG.UTF-8 UTF-8 #en_US.UTF-8 UTF-8 en_US.UTF-8 UTF-8 ### Генерираме локалните настройки locale-gen Generating locales... bg_BG.UTF-8... done en_US.UTF-8... done Generation complete. ### Указваме системата на кой език да работи. Аз ползвам английски. nano /etc/locale.conf LANG=en_US.UTF-8 export LANG=en_US.UTF-8
Отново първо ще настроим мрежата през конзола, а след това ще покажа и през текстов редактор. Дефинираме хоста.
echo My-PC >> /etc/hostname
Поправяме файла /etc/hosts.
echo "127.0.1.1 My-PC.localdomain My-PC" >> /etc/hosts cat /etc/hosts # Static table lookup for hostnames. # See hosts(5) for details. 127.0.0.1 localhost ::1 localhost 127.0.1.1 My-PC.localdomain My-PC
Да видим как става чрез текстов редактор. Даваме име на хоста и го обвързваме с IP.
nano /etc/hostname My-PC nano /etc/hosts # Static table lookup for hostnames. # See hosts(5) for details. 127.0.0.1 localhost ::1 localhost 127.0.1.1 My-PC.localhostdomain My-PC
Не сме приключили с мрежовите настройки. Примерно ако рестартираме системата няма да имаме мрежа. Мрежовия интерфейс няма да получи IP, шлюз по подразбиране DNS и т.н. На по-късен етап ще оправим проблема.
Започваме със създаване на парола за главния потребител root.
passwd root New password: Pa$$ Retype new password: Pa$$ passwd: password updated successfully
Следва създаване на втори потребител, различен от root. Не е добра практика да се работи с главния потребител.
useradd -m -g users -G wheel -s /bin/bash cccp
Създадохме потребител cccp, който е член на групата users със шел bash. Също така го присъединихме към групата wheel. Последната група е специална, използвайки sudo може да изпълнява команди с права на главния потребител. Да дадем парола на новия потребител.
passwd cccp New password: Pa$$ Retype new password: Pa$$ passwd: password updated successfully
Да проверим новия потребител.
id cccp uid=1000(cccp) gid=984(users) groups=984(users),998(wheel)
Потребителя е член на групите users и wheel Ако по някаква причина се налага да добавите потребителя към нова група, то командата е:
usermod -aG audio,games,video,storage,power cccp id cccp uid=1000(cccp) gid=984(users) groups=984(users),50(games),98(power),998(wheel),996(audio),987(storage),985(video)
Остана новия потребител да има sudo права. Добавяме права sudo за групата wheel.
echo "%wheel ALL=(ALL:ALL) ALL" >> /etc/sudoers cat /etc/sudoers ........................ ## Read drop-in files from /etc/sudoers.d @includedir /etc/sudoers.d %wheel ALL=(ALL:ALL) ALL ### Или чрез текстов редактор EDITOR=nano visudo ## User privilege specification ## root ALL=(ALL:ALL) ALL ## Uncomment to allow members of group wheel to execute any command # %wheel ALL=(ALL:ALL) ALL %wheel ALL=(ALL:ALL) ALL
Дефинирахме cccp да е групата на SUDO. Сега да инсталираме и самия пакет.
pacman -S sudo
Почти сме готови. Остава да оправим зареждащия модул.
За зареждане на системата ще ползваме GRUB. Има и други варианти но този е много гъвкав и стабилен. За да го ползваме обаче първо трябва да се инсталират няколко пакета, чрез които може на по-късен етап да се настрои.
pacman -S grub efibootmgr
grub - буут мениджър (софтуерът, който се изпълнява преди операционната система и който ви позволява да избирате измежду няколко операционни системи на вашия компютър) efibootmgr - помощна програма за управление на UEFI. Това не е зареждащ модул, а помощна програма
След като сме инсталирали пакетите можем да инсталираме GRUB на нашите дялове за зареждане, както и да го конфигурираме. Започваме с BTRFS. По подразбиране ядрото не разпознава файловата система btrfs. Тя трябва да се зареди като драйвер.
nano /etc/mkinitcpio.conf # vim:set ft=sh # MODULES # The following modules are loaded before any boot hooks are # run. Advanced users may wish to specify all system modules # in this array. For instance: # MODULES=(usbhid xhci_hcd) MODULES=(btrfs) mkinitcpio -p linux ==> Generating module dependencies ==> Creating zstd-compressed initcpio image: '/boot/initramfs-linux-fallback.img' -> Early uncompressed CPIO image generation successful ==> Initcpio image generation successful
Да инсталираме GRUB.
grub-install --target=x86_64-efi --bootloader-id=GRUB --efi-directory=/boot Installing for x86_64-efi platform. Installation finished. No error reported.
Генерираме конфигурацията на GRUB. За сега нищо не сме променяли в GRUB, просто генерираме конфигурацията.
grub-mkconfig -o /boot/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 be executed to detect other bootable partitions. Its output will be used to detect bootable binaries on them and create new boot entries. Adding boot menu entry for UEFI Firmware Settings ... done
За мене това е по-иновативен вариант. Да инсталираме пакета networkmanager и да го стартираме като демон. На по-късен етап когато ще ползваме графична среда в системата това ще ни е от полза. Да го инсталираме и активираме.
### Първво го инсталираме pacman -Sy networkmanager ### След това го активираме systemctl enable NetworkManager Created symlink '/etc/systemd/system/multi-user.target.wants/NetworkManager.service' → '/usr/lib/systemd/system/NetworkManager.service'. Created symlink '/etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service' → '/usr/lib/systemd/system/NetworkManager-dispatcher.service'. Created symlink '/etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service' → '/usr/lib/systemd/system/NetworkManager-wait-online.service'.
Това е по-твърдия вариант, съответно и по-лекия. За целта е необходимо да се инсталира демона dhcpcd, отговарящ за DHCP клиентската част.
pacman -S dhcpcd
Демона е инсталиран но след рестарта няма да е активен. За да го активираме първо трябва да определим на кой интерфейс ще работи демона.
ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host noprefixroute valid_lft forever preferred_lft forever 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000 link/ether 08:00:27:d3:4b:42 brd ff:ff:ff:ff:ff:ff altname enx080027d34b42 inet 192.168.11.87/24 brd 192.168.11.255 scope global dynamic noprefixroute enp0s3 valid_lft 454sec preferred_lft 379sec inet6 2a01:5a8:328:915a:5d3:ec02:22e8:a7b0/64 scope global dynamic mngtmpaddr noprefixroute valid_lft 86390sec preferred_lft 3590sec inet6 fe80::6d1b:b70:beed:7b78/64 scope link valid_lft forever preferred_lft forever
След като определихме интерфейса да активираме демона.
systemctl enable dhcpcd@enp0s3 Created symlink '/etc/systemd/system/multi-user.target.wants/dhcpcd@enp0s3.service' → '/usr/lib/systemd/system/dhcpcd@.service'.
Системата зареди но нямаме достъп до нея през SSH. За целта:
pacman -S openssh systemctl enable sshd
Да проверим дали SSH "слуша" на порт 22.
ss -tulpn | grep 22 udp UNCONN 0 0 127.0.0.54:53 0.0.0.0:* users:(("systemd-resolve",pid=759,fd=22)) tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1066,fd=6)) tcp LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1066,fd=7))
Готиви сме с инсталацията. Излизаме от режима arch-chroot /mnt и след това се рестартираме.
exit reboot
След рестарта системата зарежда нормално.
Всичко е точно.
Ако по някаква причина не харесвате SWAP-а да е във вид на дял, то можете да го генерирате във вид на файл.
Ръководел съм се от: https://nwb.sh/btrfs_swapfile_hibernation/ За начало да деактивираме Btrfs COW за swap подтом. Това може да се постигне чрез добавяне на +C атрибута към директорията за монтиране.
mkdir /swap chattr +C /swap
Да проверим:
lsattr -d /swap ---------------C------ /swap
За следващата стъпка ни е необходим btrfs-progs. Ние по-рано сме го инсталирали но, ако липсва да го инсталираме.
pacman -S btrfs-progs
Имаме btrfs-progs, да генерираме свап файла.
btrfs filesystem mkswapfile --size 6G /swap/swapfile create swapfile /swap/swapfile size 6.00GiB (6442450944)
Ако възнамерявате да хибернирате, препоръчвам размерът на swap файла да е поне равен на този на вашата памет, а още по-добре е swap-a да е 1.5 пъти по-голям от оперативната памет. Тъй като моята виртуална машина тук има 4GB RAM, моят swap ще бъде 6GB. Да добавим новия swap файл към fstab, така че системата да го използва автоматично.
echo "/swap/swapfile none swap defaults 0 0" | tee -a /etc/fstab swap/swapfile none swap defaults 0 0 cat /etc/fstab # Static information about the filesystems. # See fstab(5) for details. # <file system> <dir> <type> <options> <dump> <pass> # /dev/nvme0n1p2 UUID=07b412e3-3c23-4325-a1d3-bf2026ea0653 / btrfs rw,noatime,compress=zstd:3,ssd_spread,discard=async,space_cache=v2,subvol=/@ 0 0 # /dev/nvme0n1p2 UUID=07b412e3-3c23-4325-a1d3-bf2026ea0653 /home btrfs rw,noatime,compress=zstd:3,ssd_spread,discard=async,space_cache=v2,subvol=/@home 0 0 # /dev/nvme0n1p2 UUID=07b412e3-3c23-4325-a1d3-bf2026ea0653 /swap btrfs rw,noatime,compress=zstd:3,ssd_spread,discard=async,space_cache=v2,subvol=/@swap 0 0 # /dev/nvme0n1p1 UUID=6ECA-5068 /boot vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 2 /swap/swapfile none swap defaults 0 0
Ако по някаква причина не желаете да имате дял за SWAP, то може да го създадете във вид на файл. Създаваме SWAP файл с размер 2GB.
mkswap -U clear --size 2G --file /swapfile
Активираме SWAP-a.
swapon /swapfile
След рестарта за да е активен SWAP-а трябва да се добави в /etc/fstab.
nano /etc/fstab ### Най-отдолу добавяме /swapfile none swap defaults 0 0
Да проверим какви подтомове имаме.
su - btrfs su li / ID 256 gen 53 top level 5 path @ ID 257 gen 51 top level 5 path @home ID 258 gen 10 top level 5 path @snapshots ID 259 gen 27 top level 256 path var/lib/portables ID 260 gen 27 top level 256 path var/lib/machines
Да проверим свойствата на подтома снапшот.
btrfs su sh /.snapshots @snapshots Name: @snapshots UUID: 25148939-de35-c944-9fdf-be38b97a6a0b Parent UUID: - Received UUID: - Creation time: 2025-06-08 19:38:04 +0300 Subvolume ID: 258 Generation: 10 Gen at creation: 10 Parent ID: 5 Top level ID: 5 Flags: - Send transid: 0 Send time: 2025-06-08 19:38:04 +0300 Receive transid: 0 Receive time: - Snapshot(s): Quota group: n/a
btrfs subvolume snapshot -r /path/to/subvol /path/to/snapshot
-r - заключваме моментната снимка за промени. Моментната снимка също е подтом, но просто има разширени свойства. Основната им разлика е, че моментната снимка има записи за това от кой подтом е създадена. Това са полетата Parent UUID и Received UUID . Подтомът също има тези полета, но те винаги са празни. Така че по същество моментна снимка и подотом са едно и също нещо. Още няколко полезни команди.
sudo btrfs su get-default / ID 5 (FS_TREE) sudo btrfs su li / ID 256 gen 79 top level 5 path @ ID 257 gen 77 top level 5 path @home ID 258 gen 9 top level 5 path @.snapshots ID 259 gen 14 top level 256 path var/lib/portables ID 260 gen 14 top level 256 path var/lib/machines sudo btrfs su set-default 256 / sudo btrfs su get-default / ID 256 gen 79 top level 5 path @
С това приключвам базовата инсталация на Arch Linux.