Jak poznać miejsce na dysku zajmowane przez pakiety w OpenWrt?


16

Próbuję skonfigurować OpenWrt na moim urządzeniu i brakuje mi miejsca. Pobrałem kilka pakietów narzędzi. Jak teraz określić ich wagi, aby zdecydować, co odinstalować?

Czy można wyświetlić rozmiar zainstalowanych pakietów za pomocą OPKG?

Odpowiedzi:


11

Nie każde środowisko OpenWrt jest skonfigurowane w ten sam sposób, więc moja odpowiedź to strzał w ciemność ...

Przykładowe dane wyjściowe pochodzą z OpenWrt-12.09 na „TP-Link TL-WDR4300”.

ssh do routera.

Sprawdź swoje zestawy plików.

root@AP9:~# df
Filesystem           1K-blocks      Used Available Use% Mounted on
rootfs                    5184      2124      3060  41% /
/dev/root                 2048      2048         0 100% /rom
tmpfs                    63340       948     62392   1% /tmp
tmpfs                      512         0       512   0% /dev
/dev/mtdblock3            5184      2124      3060  41% /overlay
overlayfs:/overlay        5184      2124      3060  41% /
/dev/sda1             31234700    593536  29075728   2% /mnt/sda1

/dev/sda1 jest karta micro SD mojej pamięci UMTS ... po prostu zignoruj ​​to.

Wiele routerów jest flashowanych w podobny sposób, jak pokazano tutaj: System plików root tylko do odczytu jest pseudo zapisywalny przez system plików nakładki.

Zajrzyj do środka /overlay...

root@AP9:~# cd /overlay/usr/lib/opkg/info/
root@AP9:/overlay/usr/lib/opkg/info# ls *.list | tail -3
usb-modeswitch-data.list
usb-modeswitch.list
zlib.list

Ten katalog zawiera informacje o dodatkowo zainstalowanych pakietach. Pliki kończące się na .listsą listami plików zainstalowanych przez pakiet o podobnej nazwie (bez .list):

root@AP9:/overlay/usr/lib/opkg/info# cat zlib.list 
/usr/lib/libz.so.1.2.7
/usr/lib/libz.so.1
/usr/lib/libz.so

Pakiet zlibma zainstalowane 3 pliki.

root@AP9:/overlay/usr/lib/opkg/info# du $(cat zlib.list) 
71      /usr/lib/libz.so.1.2.7
1       /usr/lib/libz.so.1
1       /usr/lib/libz.so

Pakiet zlibma 73 KB zainstalowanych plików.

Surowy 1-liniowy klej do sklejenia tego wszystkiego razem i jego skrócona wydajność:

# awk 'BEGIN{D="cd /overlay/usr/lib/opkg/info&&";C=D"ls *.list";while(C|getline>0){P=substr(F=$1,1,length($1)-5);J=D"du -sk $(cat "F")";s=0;while(J|getline>0){s+=$1;t+=$1}close(J);print s"\t"P}print t"\t---TOTAL---"}'
26      blkid
30      block-mount
17      chat
55      comgt
6       kmod-fs-exportfs
(((...some lines skipped...)))
14      portmap
48      swap-utils
223     usb-modeswitch-data
45      usb-modeswitch
73      zlib
4184    ---TOTAL---

HTH!


Dodano 17.10.2014:

Poniższe dane wyjściowe pochodzą z OpenWrt-12.09 na „TP-Link TL-WR703N” i pokazują, jak dodać sortowanie danych wyjściowych według wielkości pakietu.

Zobacz, gdzie i jak zmienna Swchodzi do gry ...

# awk 'BEGIN{D="cd /overlay/usr/lib/opkg/info&&";C=D"ls *.list";S="sort -n";while(C|getli
ne>0){P=substr(F=$1,1,length($1)-5);J=D"du -sk $(cat "F")";s=0;while(J|getline>0){s+=$1;t+=$1}close(J)
;print s"\t"P|S}close(S);print t"\t---TOTAL---"}'
5       kmod-lib-crc16
5       luci-proto-3g
12      libuuid
13      kmod-usb-serial-wwan
17      chat
24      kmod-usb-acm
24      libusb
26      blkid
30      block-mount
41      kmod-usb-serial
45      usb-modeswitch
48      kmod-usb-serial-option
48      swap-utils
55      comgt
67      kmod-usb-storage
148     libblkid
154     kmod-scsi-core
223     usb-modeswitch-data
382     kmod-fs-ext4
1367    ---TOTAL---

Ponownie: HTH!


Dodano 13.01.2018:

Powyższy sposób został przetestowany na OpenWrt-AA.

Teraz, patrząc na LEDE-17.01, zmieniła się ścieżka: zastąpienie /overlaygo /overlay/uppernaprawia to.

Status quo ( opkg-list-user-installed-sorted-by-sizenie jako 1-liniowy):

#!/usr/bin/awk -f
BEGIN {
        D="cd /overlay/upper/usr/lib/opkg/info&&"
        C=D"ls *.list"
        S="sort -n"
        while(C|getline>0) {
                P=substr(F=$1,1,length($1)-5)
                J=D"du -sk $(cat "F")"
                s=0
                while(J|getline>0) {
                        s+=$1
                        t+=$1
                }
                close(J)
                print s"\t"P|S
        }
        close(S)
        print t"\t---TOTAL---"
}

Testowe uruchomienie:

root@zsun0:~# ./opkg-list-user-installed-sorted-by-size
8       luci-ssl
9       libustream-mbedtls
13      px5g-mbedtls
338     libmbedtls
368     ---TOTAL---

Pytanie otwarte: Kiedy nastąpiła ta zmiana w /overlaystrukturze? LEDE-17 jest następcą OpenWrt-CC i nie mam pod ręką żadnych systemów OpenWrt. Więc jeśli potrzebujesz tego na OpenWrt-BB lub -CC, zajrzyj /overlaynajpierw do środka .


Niesamowite! Brak tylko sortowania ;-)
bonanza

@bonanza ... Poof! Lub „simsAWKlabim” w AWKish ... ;-D

4

W oparciu o rozwiązanie Yeti istnieje inna możliwość, która może być szybsza. Zamiast obliczać rozmiar dudla plików w listpliku, możemy użyć deklarowanego rozmiaru w controlpliku.

Coś jak mój mały opkg_sizesskrypt

cd /usr/lib/opkg/info
for i in *.control
do
  echo `grep Size "$i" | cut -f 2 -d :` "${i%.control}"
done

Jeśli chcesz posortować dane wyjściowe, możesz je uruchomić sort:

./opkg_sizes | sort -n

EDYTOWAĆ

Porównanie wyników mojego skryptu z ujawnionymi różnicami yeti . To dlatego, że wspomniał, /overlay/usr/lib/opkg/infopodczas gdy myślałem, że /overlayprefiks jest niepotrzebny. Cóż, nie do końca rozumiem dlaczego, ale /usr/lib/opkg/infodaje także pakiety systemowe, a /overlay/usr/lib/opkg/infodaje tylko pakiety użytkownika.

Jeśli więc użytkownik jest zainteresowany również pakietami systemowymi, użyj pierwszej wersji. Ale aby uzyskać tylko pakiety użytkownika, po prostu zamień pierwszą linię na:

 cd /overlay/usr/lib/opkg/info

Po wykonaniu tych czynności oba skrypty odnoszą się do tych samych pakietów, ale z różnymi liczbami ... (poza oczywistą różnicą między bajtami a kilobajtami :-))


root@ap8:~# ls -l 1412453029-14.07-wdr4300-default-packages 
-rw-r--r--    1 root     root          2683 Oct  4 20:03 1412453029-14.07-wdr4300-default-packages
root@ap8:~# du 1412453029-14.07-wdr4300-default-packages 
3       1412453029-14.07-wdr4300-default-packages

lspokazuje rozmiar w bajtach, dupokazuje rozmiar wszystkich bloków przydzielonych przez plik.


Zapytano, ile miejsca zajmują pobrane pakiety. Usunięcie pakietów instalowanych we flashowanym oprogramowaniu nie zwalnia miejsca w systemie plików nakładki. . . . . . Przynajmniej tak interpretuję pytanie ...

Zgadzam się z twoim rozumieniem pytania. Ale pomyślałem, że nakładka / powinna odzwierciedlać prawdziwy system, może mieć więcej informacji; ale byłem zaskoczony, że zawiera mniej informacji.
Zvika

Dziwne jest również to, że 2 metody dają różne liczby ...
Zvika,

duliczy się w ziarnistości wielkości bloku systemu plików. I / overlay to tylko zapisowa część warstw systemu plików.

Dobrze, więc zakładam, że stwierdzi, że odpowiedź brzmi lepiej ...
Zvika

2

Ta odpowiedź jest ulepszoną wersją odpowiedzi Zviki . Ponieważ kod źródłowy jest zasadniczo inny, uważam, że lepiej jest dodać go jako dodatkową odpowiedź, zamiast edycji oryginalnej.

#!/bin/sh
grep -H Installed-Size: /overlay/usr/lib/opkg/info/*.control | \
  sed 's,^.*/\([^/]\+\)\.control:Installed-Size: *\(.*\),\2\t\1,'

Oryginalny kod wymaga zbyt wiele widelce, co czyni go tak wolno, jak jedną sekundę. Ten ulepszony kod jest krótszy i wykorzystuje tylko trzy procesy, co prowadzi do niesamowicie szybkiego czasu pracy wynoszącego 0,02 s (na moim routerze).

Możesz dostosować ścieżki:

  • /overlay/usr/lib/opkg/info/*.control→ pakiety zainstalowane przez użytkownika. Są to pakiety, które można usunąć, aby zwolnić miejsce.
  • /rom/usr/lib/opkg/info/*.control→ pakiety systemowe. Nie można ich odinstalować. (Chyba że naprawdę wiesz, co robisz). Ponieważ są one przechowywane na partycji tylko do odczytu, usunięcie ich nie zwolni dodatkowego miejsca.
  • /usr/lib/opkg/info/*.control → wszystkie pakiety.

0

Dla mnie najłatwiejszym sposobem było użycie find;

find / -size +500k

z wydajnością poniżej;

# find / -size +500k
/lib/libc.so
/lib/modules/4.4.92/mac80211.ko
/overlay/upper/usr/lib/libcrypto.so.1.0.0
/overlay/upper/usr/lib/libdns.so.165.0.4
/overlay/upper/usr/sbin/sshd
/rom/lib/libc.so
/rom/lib/modules/4.4.92/mac80211.ko
/usr/lib/libcrypto.so.1.0.0
/usr/lib/libdns.so.165.0.4
/usr/sbin/sshd

Były to „duże” pliki w mojej instalacji LEDE. Potrzebowałem dodatkowej przestrzeni na routerze, aby móc sformatować, podzielić na partycje i zamontować pamięć USB. Dostosuj +500kdo rozmiaru pliku, który bardziej Ci odpowiada.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.