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 .list
sã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 zlib
possui 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 zlib
possui 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 S
entra 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 /overlay
por /overlay/upper
corrige isso.
Status quo ( opkg-list-user-installed-sorted-by-size
nã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 /overlay
estrutura? 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 /overlay
primeiro.
Com base na solução do yeti , há outra possibilidade, que pode ser mais rápida. Em vez de calcular o tamanho com
du
os arquivos nolist
arquivo, podemos usar o tamanho declarado nocontrol
arquivo.Algo como meu pequeno
opkg_sizes
scriptSe você deseja que a saída seja classificada, você pode executá-la através de
sort
:EDITAR
Comparando os resultados do meu script com as diferenças reveladas do yeti . É porque ele se referiu
/overlay/usr/lib/opkg/info
enquanto eu pensava que o/overlay
prefixo é desnecessário. Bem, eu não entendo completamente o porquê, mas/usr/lib/opkg/info
fornece também os pacotes do sistema, enquanto/overlay/usr/lib/opkg/info
fornece 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:
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 :-))
ls
mostra o tamanho em bytes,du
mostra o tamanho de todos os blocos alocados pelo arquivo.fonte
du
conta no sistema de arquivos granularidade de tamanho de bloco. E / overlay é apenas a parte inicial das camadas do sistema de arquivos.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.
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.fonte
Para mim, a maneira mais fácil era usar
find
;com saída abaixo;
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
+500k
para um tamanho de arquivo mais adequado a você.fonte