Wie erkenne ich den von Paketen in OpenWrt belegten Speicherplatz?

16

Ich versuche, OpenWrt auf meinem Gerät zu konfigurieren und habe keinen Speicherplatz mehr. Ich habe einige Tooling-Pakete heruntergeladen. Wie kann ich nun ihr Gewicht bestimmen, um zu entscheiden, was deinstalliert werden soll?

Ist es möglich, die Größe der installierten Pakete mit OPKG anzuzeigen?

Suzan Cioc
quelle

Antworten:

11

Nicht jede OpenWrt-Umgebung ist auf die gleiche Weise eingerichtet, daher ist meine Antwort ein Schuss in die Dunkelheit ...

Die Beispielausgabe stammt von OpenWrt-12.09 auf einem "TP-Link TL-WDR4300".

ssh in Ihren Router.

Überprüfen Sie Ihre 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 ist die micro SD Karte meines UMTS Sticks ... einfach ignorieren.

Viele Router werden auf ähnliche Weise wie hier dargestellt geflasht: Ein schreibgeschütztes Root-Dateisystem wird durch ein Overlay-Dateisystem pseudobeschreibbar gemacht.

Schau rein /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

Dieses Verzeichnis enthält die Informationen zu zusätzlich installierten Paketen. Die Dateien, die mit enden, .listsind Listen von Dateien, die vom Paket mit dem ähnlichen Namen (ohne .list) installiert wurden :

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

Paket zlibhat 3 Dateien installiert.

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

Das Paket zlibenthält 73 KB installierte Dateien.

Ein roher 1-Liner, der alles zusammenklebt und die Ausgabe verkürzt:

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


Hinzugefügt am 17.10.2014:

Die folgende Ausgabe stammt aus OpenWrt-12.09 auf einem "TP-Link TL-WR703N" und zeigt, wie die Ausgabe nach Paketgröße sortiert wird.

Schauen Sie sich an, wo und wie die Variable Sins Spiel kommt ...

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

Nochmals: HTH!


Hinzugefügt am 13.01.2018:

Der obige Weg wurde mit OpenWrt-AA getestet.

Bei LEDE-17.01 hat sich ein Pfad geändert: Ersetzen /overlaydurch /overlay/upperbehebt diesen Fehler.

Status quo ( opkg-list-user-installed-sorted-by-sizenicht als 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---"
}

Testlauf:

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

Offene Frage: Wann ist diese /overlayStrukturänderung eingetreten? LEDE-17 ist der Nachfolger von OpenWrt-CC und ich habe keine OpenWrt-Systeme zur Hand. Wenn Sie dies für OpenWrt-BB oder -CC benötigen, schauen Sie /overlayzuerst hinein.


quelle
Genial! Nur die Sortierung fehlt ;-)
Bonanza
@bonanza ... Poof! Oder "simsAWKlabim" in AWKish ... ;-D
4

Basierend auf Yetis Lösung gibt es eine andere Möglichkeit, die möglicherweise schneller ist. Anstatt die Größe mit dufür die Dateien in der listDatei zu berechnen , können wir die deklarierte Größe in der controlDatei verwenden.

Sowas wie mein kleines opkg_sizesDrehbuch

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

Wenn Sie möchten, dass die Ausgabe sortiert wird, können Sie Folgendes ausführen sort:

./opkg_sizes | sort -n

BEARBEITEN

Das Vergleichen meiner Skriptergebnisse mit Yetis aufgedeckten Unterschieden. Es ist, weil er angesprochen hat, /overlay/usr/lib/opkg/infowährend ich dachte, dass das /overlayPräfix unnötig ist. Nun, ich verstehe nicht ganz warum, aber ich /usr/lib/opkg/infogebe auch die Systempakete an, während ich /overlay/usr/lib/opkg/infonur die Pakete des Benutzers gebe.

Wenn der Benutzer auch an den Systempaketen interessiert ist, verwenden Sie die erste Version. Um jedoch nur die Pakete des Benutzers zu erhalten, ersetzen Sie einfach die erste Zeile durch:

 cd /overlay/usr/lib/opkg/info

Danach beziehen sich beide Skripte auf die gleichen Pakete, jedoch mit unterschiedlichen Nummern ... (abgesehen von dem offensichtlichen Unterschied zwischen Bytes und Kilobytes :-))


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

lsZeigt die Größe in Bytes an, duzeigt die Größe aller von der Datei zugewiesenen Blöcke an.

Zvika
quelle
Es wurde gefragt, wie viel Speicherplatz heruntergeladene Pakete verbrauchen. Durch das Entfernen von Paketen, die in der Flash-Firmware installiert sind, wird kein Speicherplatz im Overlay-Dateisystem freigegeben. . . . . . Zumindest habe ich die Frage so interpretiert ...
Ich stimme Ihrem Verständnis der Frage zu. Aber ich dachte, das / overlay sollte das reale System widerspiegeln, vielleicht mehr Informationen haben; aber ich war überrascht, dass es weniger Informationen enthält .
Zvika
Es ist auch seltsam, dass die 2 Methoden unterschiedliche Zahlen geben ...
Zvika
duzählt in Dateisystem blockiert Granularität. Und / overlay ist nur der beschreibbare Teil der Dateisystemebenen.
OK, dann
gehe
2

Diese Antwort ist eine verbesserte Version der Antwort von Zvika . Da der Quellcode wesentlich anders ist, halte ich es für besser, ihn als zusätzliche Antwort anstelle einer Bearbeitung des ursprünglichen Codes hinzuzufügen.

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

Für den ursprünglichen Code waren zu viele Gabeln erforderlich, sodass der Vorgang nur eine Sekunde dauert. Dieser verbesserte Code ist kürzer und verwendet nur drei Prozesse. Dies führt zu einer blitzschnellen Laufzeit von 0,02 Sekunden (auf meinem Router).

Sie können die Pfade optimieren:

  • /overlay/usr/lib/opkg/info/*.control→ vom Benutzer installierte Pakete. Dies sind die Pakete, die entfernt werden können, um Speicherplatz freizugeben.
  • /rom/usr/lib/opkg/info/*.control→ Systempakete. Diese können nicht deinstalliert werden. (Es sei denn, Sie wissen wirklich , was Sie tun.) Da sie in der schreibgeschützten Partition gespeichert sind, wird durch das Entfernen kein zusätzlicher Speicherplatz freigegeben.
  • /usr/lib/opkg/info/*.control → alle pakete.
Denilson Sá Maia
quelle
0

Für mich war der einfachste Weg zu benutzen find;

find / -size +500k

mit Ausgabe unten;

# 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

Dies waren die "großen" Dateien in meiner LEDE-Installation. Ich benötigte zusätzlichen Speicherplatz auf meinem Router, um USB-Speicherplatz formatieren, partitionieren und bereitstellen zu können. Stellen Sie +500keine Dateigröße ein, die besser zu Ihnen passt.

Johnny5
quelle