Como saber o espaço em disco ocupado pelos pacotes no OpenWrt?

16

Estou tentando configurar o OpenWrt no meu dispositivo e fiquei sem espaço. Eu estava baixando alguns pacotes de ferramentas. Agora, como posso determinar seus pesos para decidir o que desinstalar?

É possível exibir o tamanho dos pacotes instalados com o OPKG?

Suzan Cioc
fonte

Respostas:

11

Nem todo ambiente OpenWrt é configurado da mesma maneira, então minha resposta é um tiro no escuro ...

A saída de exemplo é obtida do OpenWrt-12.09 em um "TP-Link TL-WDR4300".

ssh no seu roteador.

Verifique seus arquivos.

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 é o cartão micro SD do meu cartão UMTS ... simplesmente ignore isso.

Muitos roteadores são exibidos de forma semelhante à que é vista aqui: Um item de arquivo raiz somente leitura é tornado pseudo-gravável por um sistema de arquivos overlay.

Olhe 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

Este diretório contém as informações sobre pacotes instalados adicionalmente. Os arquivos que terminam com .listsão listas de arquivos instalados pelo pacote com o nome semelhante (sem .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

O pacote zlibpossui 3 arquivos instalados.

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

O pacote zlibpossui 73kbytes de arquivos instalados.

Um liner bruto para colar tudo isso e reduzir a produção:

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


Adicionado 2014-10-17:

A seguinte saída é obtida do OpenWrt-12.09 em um "TP-Link TL-WR703N" e mostra como adicionar a classificação da saída pelo tamanho do pacote.

Veja onde e como a variável Sentra no jogo ...

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

Mais uma vez: HTH!


Adicionado 2018-01-13:

A maneira acima foi testada no OpenWrt-AA.

Agora, olhando para o LEDE-17.01, um caminho foi alterado: Substituindo /overlaypor /overlay/uppercorrige isso.

Status quo ( opkg-list-user-installed-sorted-by-sizenão como 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---"
}

Execução de teste:

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

Pergunta em aberto: Quando aconteceu essa mudança na /overlayestrutura? O LEDE-17 é o sucessor do OpenWrt-CC e não tenho sistemas executando o OpenWrt em mãos. Portanto, se você precisar disso no OpenWrt-BB ou -CC, dê uma olhada no interior /overlayprimeiro.


fonte
Impressionante! A classificação Só está faltando ;-)
bonanza
@bonanza ... Poof! Ou "simsAWKlabim" em AWKish ... ;-D
4

Com base na solução do yeti , há outra possibilidade, que pode ser mais rápida. Em vez de calcular o tamanho com duos arquivos no listarquivo, podemos usar o tamanho declarado no controlarquivo.

Algo como meu pequeno opkg_sizesscript

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

Se você deseja que a saída seja classificada, você pode executá-la através de sort:

./opkg_sizes | sort -n

EDITAR

Comparando os resultados do meu script com as diferenças reveladas do yeti . É porque ele se referiu /overlay/usr/lib/opkg/infoenquanto eu pensava que o /overlayprefixo é desnecessário. Bem, eu não entendo completamente o porquê, mas /usr/lib/opkg/infofornece também os pacotes do sistema, enquanto /overlay/usr/lib/opkg/infofornece apenas os pacotes do usuário.

Portanto, se o usuário também estiver interessado nos pacotes do sistema, use a primeira versão. Mas, para alcançar apenas os pacotes do usuário, substitua a primeira linha por:

 cd /overlay/usr/lib/opkg/info

Depois de fazer isso, os dois scripts se referem aos mesmos pacotes, mas com números diferentes ... (além da óbvia diferença entre bytes e 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

lsmostra o tamanho em bytes, dumostra o tamanho de todos os blocos alocados pelo arquivo.

Zvika
fonte
Foi perguntado quanto espaço os pacotes baixados estão consumindo. A remoção de pacotes sendo instalados no firmware atualizado não libera espaço no sistema de arquivos de sobreposição. . . . . . Pelo menos esta é a maneira que eu interpretetd a questão ...
Eu concordo com a sua compreensão da questão. Mas pensei que a / overlay deveria refletir o sistema real, talvez tenha mais algumas informações; mas fiquei surpreso por conter menos informações.
Zvika 28/10
Além disso, é estranho que os 2 métodos dão números diferentes ...
Zvika
duconta no sistema de arquivos granularidade de tamanho de bloco. E / overlay é apenas a parte inicial das camadas do sistema de arquivos.
OK então, eu suponho que ele conclui que a sua resposta é melhor ...
Zvika
2

Esta resposta é uma versão aprimorada da resposta do Zvika . Como o código-fonte é substancialmente diferente, acredito que é melhor adicioná-lo como uma resposta adicional, em vez de editar o original.

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

O código original exigia muitos garfos, tornando-o tão lento quanto um segundo. Esse código aprimorado é mais curto e usa apenas três processos, resultando em um tempo de execução rápido de 0,02s (no meu roteador).

Você pode ajustar os caminhos:

  • /overlay/usr/lib/opkg/info/*.control→ pacotes instalados pelo usuário. Estes são os pacotes que podem ser removidos para liberar espaço.
  • /rom/usr/lib/opkg/info/*.control→ pacotes do sistema. Estes não podem ser desinstalados. (A menos que você realmente saiba o que está fazendo.) Como eles são armazenados na partição somente leitura, removê-los não liberará espaço adicional.
  • /usr/lib/opkg/info/*.control → todos os pacotes.
Denilson Sá Maia
fonte
0

Para mim, a maneira mais fácil era usar find;

find / -size +500k

com saída abaixo;

# 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

Esses foram os arquivos "grandes" na minha instalação do LEDE. Eu precisava de espaço extra no meu roteador para poder formatar, particionar e montar algum espaço de armazenamento USB. Ajuste +500kpara um tamanho de arquivo mais adequado a você.

Johnny5
fonte