Temat: [HOWTO] Resize partycji głównej dla x86 - online
W czym jest problem?
Mam (* miałem) Alixa w którym jest dysk 6GB. Niestety, po instalacji OpenWrt dostępne jest tylko 256MB pamięci stałej. Dlaczego? Ponieważ tak są zrobione domyślne obrazy OpenWrt. Marnuje się trochę przestrzeni...
Co więc można zrobić?
Można:
- utworzyć dodatkową partycję z reszty dysku i podmontować to przez /etc/config/fstab gdzieś w systemie
- samodzielnie skompilować OpenWrt ustawiając już odpowiednie wielkości dysku (co ma wadę bo jak mamy dysk innej pojemności to znów jest problem)
- rozszerzyć partycję systemową
I ta ostatnia opcja w moim przypadku najbardziej mnie interesuje. Oczywiście przed instalacją dysku w routerze można go podłączyć do zwykłego komputera, użyć gparted i graficznie zmienić rozmiar partycji. Ale niestety dysk mam już w routerze, niekoniecznie chce mi się go rozbierać, więc raczej chcę to zrobić już w samym urządzeniu.
Jak rozszerzyć partycję systemową online
Przede wszystkim... ostrożnie. Dlaczego? Bo trzeba zmienić rozmiar partycji, a najprościej zrobić to przez usunięcie i jej ponowne założenie w tym samym miejscu tylko większą. Więc jeżeli pomylimy się z cyferkami to możemy sobie coś w nim nadpisać.
Co będzie potrzebne?
W sumie tylko dostęp do internetu oraz dostęp do routera. I jeszcze jedno - rozwiązanie dotyczy tylko obrazów squashfs dla x86. W nich system plików jest na squashfs, a w /overlay montowana jest pozostała część partycji z wykorzystaniem systemu plików f2fs. Jeżeli ktoś wybrał system plików ext4 to ten poradnik nie jest dla niego.
Do dzieła!
1. Podłączamy kabel z internetem do routera, wykonujemy następujące polecenia:
root@OpenWrt:~# opkg update
root@OpenWrt:~# opkg install fdisk f2fs-tools
Czyli aktualizujemy listę pakietów i instalujemy pakiety fdisk oraz f2fs-tools.
2. Uruchamiamy fdiska i wyświetlamy partycje:
root@OpenWrt:~# fdisk -l /dev/sda
Disk /dev/sda: 5.7 GiB, 6144284672 bytes, 12000556 sectors
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: dos
Disk identifier: 0xcb4f1a80
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 512 33279 32768 16M 83 Linux
/dev/sda2 33792 558079 524288 256M 83 Linux
root@OpenWrt:~#
Dysk ma 5.7GB, utworzone są domyślnie dwie partycje: sda1 o rozmiarze 16MB (tam jest m.in. grub i kernel), tej partycji nie ruszamy oraz sda2 o rozmiarze 256MB która zawiera system plików. W moim przypadku druga partycja rozpoczyna się w sektorze 33792 (to ważne i trzeba to zapisać sobie na boku).
3. Usuwamy drugą partycję, zakładamy ją jeszcze raz od sektora 33792 do końca dysku:
root@OpenWrt:~# fdisk /dev/sda
Welcome to fdisk (util-linux 2.32).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): d
Partition number (1,2, default 2): 2
Partition 2 has been deleted.
Command (m for help): p
Disk /dev/sda: 5.7 GiB, 6144284672 bytes, 12000556 sectors
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: dos
Disk identifier: 0xcb4f1a80
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 512 33279 32768 16M 83 Linux
Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (33280-12000555, default 34816): 33792
Last sector, +sectors or +size{K,M,G,T,P} (33792-12000555, default 12000555):
Created a new partition 2 of type 'Linux' and of size 5.7 GiB.
Partition #2 contains a squashfs signature.
Do you want to remove the signature? [Y]es/[N]o: N
Command (m for help): w
The partition table has been altered.
Syncing disks.
Command (m for help): p
Disk /dev/sda: 5.7 GiB, 6144284672 bytes, 12000556 sectors
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: dos
Disk identifier: 0xcb4f1a80
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 512 33279 32768 16M 83 Linux
/dev/sda2 33792 12000555 11966764 5.7G 83 Linux
Command (m for help): q
root@OpenWrt:~#
Przy tworzeniu drugiej partycji podałem dokładnie ten sam numer sektora (33792) w którym ona się rozpoczynała, nie taki jak fdisk proponuje, dzięki temu nadal są tam dane na właściwym miejscu.
Na samym końcu jeszcze raz wyświetliłem partycje, ostatnia ma już 5.7GB. Ale sam rozmiar partycji jeszcze nie oznacza że system plików też jest taki.
4. Restartujemy router:
root@OpenWrt:~# reboot
5. Niech się uruchomi normalnie. Sprawdzamy ile jest miejsca:
root@OpenWrt:~# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 3.8M 3.8M 0 100% /rom
tmpfs 123.8M 52.0K 123.8M 0% /tmp
/dev/loop0 250.4M 14.5M 165.9M 8% /overlay
overlayfs:/overlay 250.4M 14.5M 165.9M 8% /
/dev/sda1 15.7M 2.3M 13.1M 15% /boot
/dev/sda1 15.7M 2.3M 13.1M 15% /boot
tmpfs 512.0K 0 512.0K 0% /dev
Czyli całość nadal ma 250MB.
6. Czas na rozszerzenie systemu plików.
Czyścimy po prostu starą partycję
root@OpenWrt:~# umount /dev/loop0
root@OpenWrt:~# dd if=/dev/zero of=/dev/loop0
Po kilkudziesięciu sekundach można przerwać polecenie przez ctrl-c i restartujemy router:
root@OpenWrt:~# reboot
W starszych wydaniach istniała także alternatywna możliwość zmiany bez utraty danych (nie jest to już możliwe w obecnych wydaniach, chyba że wykona się resize w innym komputerze):
Przełączamy partycję /overlay w tryb tylko-do-odczytu i zmieniamy jej rozmiar:
root@OpenWrt:~# mount -o remount,ro /overlay
root@OpenWrt:~# resize.f2fs /dev/loop0
root@OpenWrt:~# reboot
Wypisze dość sporo komunikatów, później zrestartuje się router.
7. Po ponownym uruchomieniu sprawdzamy:
root@OpenWrt:/# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 3.8M 3.8M 0 100% /rom
tmpfs 123.8M 56.0K 123.8M 0% /tmp
/dev/loop0 5.7G 49.9M 5.3G 1% /overlay
overlayfs:/overlay 5.7G 49.9M 5.3G 1% /
/dev/sda1 15.7M 2.3M 13.1M 15% /boot
/dev/sda1 15.7M 2.3M 13.1M 15% /boot
tmpfs 512.0K 0 512.0K 0% /dev
Czyli mamy oczekiwane 5.7GB przestrzeni.
PS 1. Po zrobieniu upgrade być może trzeba będzie to zrobić ponownie.
PS 2. Dobrze jest to zrobić na czystym systemie ew zatrzymać procesy które zapisują coś do flash (jakieś statystyki, dlna, samba, torrent itp).