Come conoscere lo spazio su disco occupato dai pacchetti in OpenWrt?


16

Sto cercando di configurare OpenWrt sul mio dispositivo e sono uscito dallo spazio. Stavo scaricando alcuni pacchetti di strumenti. Ora come posso determinare i loro pesi in modo da decidere cosa disinstallare?

È possibile visualizzare la dimensione dei pacchetti installati con OPKG?

Risposte:


11

Non tutti gli ambienti OpenWrt sono impostati allo stesso modo, quindi la mia risposta è uno scatto nel buio ...

L'output di esempio è tratto da OpenWrt-12.09 su un "TP-Link TL-WDR4300".

ssh nel tuo router.

Controlla i tuoi filesytsems.

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 è la scheda micro SD del mio stick UMTS ... basta ignorarlo.

Molti router sono mostrati in modo simile a quello mostrato qui: un filesystem root di sola lettura è reso pseudo scrivibile da un filesystem overlay.

Guarda dentro /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

Questa directory contiene le informazioni sui pacchetti installati in aggiunta. I file che terminano con .listsono elenchi di file installati dal pacchetto con il nome simile (senza .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

Il pacchetto zlibha 3 file installati.

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

Il pacchetto zlibha 73kbyte di file installati.

Un grezzo 1-liner per incollare tutto insieme e ridurre la produzione:

# 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!


Aggiunto il 17-10-2014:

Il seguente output è tratto da OpenWrt-12.09 su un "TP-Link TL-WR703N" e mostra come aggiungere l'ordinamento dell'output in base alla dimensione del pacchetto.

Dai un'occhiata a dove e come la variabile Sentra in gioco ...

# 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---

Ancora: HTH!


Aggiunto 13/01/2018:

Il modo sopra è stato testato su OpenWrt-AA.

Ora guardando LEDE-17.01 un percorso è cambiato: sostituirlo /overlaycon /overlay/uppercorrezioni.

Status quo ( opkg-list-user-installed-sorted-by-sizenon come 1-liner):

#!/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---"
}

Prova:

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

Domanda aperta: quando è avvenuto questo cambiamento nella /overlaystruttura? LEDE-17 è il successore di OpenWrt-CC e non ho sistemi con OpenWrt a portata di mano. Quindi, se ne hai bisogno su OpenWrt-BB o -CC, dai un'occhiata /overlayprima dentro .


Eccezionale! Manca solo l'ordinamento ;-)
bonanza,

@bonanza ... Poof! O "simsAWKlabim" in AWKish ... ;-D

4

Sulla base della soluzione di yeti , esiste un'altra possibilità, che potrebbe essere più veloce. Invece di calcolare la dimensione con duper i file nel listfile, possiamo usare la dimensione dichiarata nel controlfile.

Qualcosa come la mia piccola opkg_sizessceneggiatura

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

Se si desidera ordinare l'output, è possibile eseguirlo sort:

./opkg_sizes | sort -n

MODIFICARE

Confrontando i risultati della mia sceneggiatura con le differenze rivelate di Yeti . È perché ha fatto riferimento /overlay/usr/lib/opkg/infomentre pensavo che il /overlayprefisso non fosse necessario. Bene, non capisco perfettamente perché, ma /usr/lib/opkg/infofornisce anche i pacchetti di sistema, mentre /overlay/usr/lib/opkg/infofornisce solo i pacchetti dell'utente.

Quindi, se l'utente è interessato anche ai pacchetti di sistema, usa la prima versione. Ma per ottenere solo i pacchetti dell'utente, basta sostituire la prima riga a:

 cd /overlay/usr/lib/opkg/info

Dopo averlo fatto, entrambi gli script fanno riferimento agli stessi pacchetti, ma con numeri diversi ... (oltre all'ovvia differenza tra byte e kilobyte :-))


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

lsmostra la dimensione in byte, dumostra la dimensione di tutti i blocchi allocati dal file.


È stato chiesto quanto spazio stanno consumando i pacchetti scaricati. La rimozione dei pacchetti installati nel firmware flash non libera spazio nel filesystem overlay. . . . . . Almeno questo è il modo in cui ho interpretato la domanda ...

Sono d'accordo con la tua comprensione della domanda. Ma ho pensato che / overlay dovesse riflettere il sistema reale, forse avere qualche informazione in più ; ma sono rimasto sorpreso dal fatto che contenga meno informazioni.
Zvika,

Inoltre, è strano che i 2 metodi forniscano numeri diversi ...
Zvika,

duconta nella granularità della dimensione dei blocchi del filesystem. E / overlay è solo la parte writale dei livelli del filesystem.

OK allora, suppongo che concluda che la tua risposta è migliore ...
Zvika,

2

Questa risposta è una versione migliorata della risposta di Zvika . Dato che il codice sorgente è sostanzialmente diverso, credo che sia meglio aggiungerlo come risposta aggiuntiva, anziché una modifica di quella originale.

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

Il codice originale richiedeva troppe forcelle, rendendolo lento quanto un secondo. Questo codice migliorato è più breve e utilizza solo tre processi, portando a un tempo di esecuzione estremamente rapido di 0,02 secondi (sul mio router).

Puoi modificare i percorsi:

  • /overlay/usr/lib/opkg/info/*.control→ pacchetti installati dall'utente. Questi sono i pacchetti che possono essere rimossi per liberare spazio.
  • /rom/usr/lib/opkg/info/*.control→ pacchetti di sistema. Questi non possono essere disinstallati. (A meno che tu non sappia davvero cosa stai facendo.) Dato che sono memorizzati nella partizione di sola lettura, rimuoverli non libererà spazio aggiuntivo.
  • /usr/lib/opkg/info/*.control → tutti i pacchetti.

0

Per me il modo più semplice era usare find;

find / -size +500k

con uscita sotto;

# 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

Questi erano i "grandi" file nella mia installazione di LEDE. Avevo bisogno di un po 'di spazio extra sul mio router in modo da poter formattare, partizionare e montare un po' di spazio di archiviazione USB. Regola in base +500kalle dimensioni del file più adatte a te.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.