Как узнать дисковое пространство, занимаемое пакетами в OpenWrt?

16

Я пытаюсь настроить OpenWrt на моем устройстве и не хватает места. Я загружал несколько пакетов инструментов. Теперь, как я могу определить их вес, чтобы решить, что удалить?

Можно ли отобразить размер установленных пакетов с помощью OPKG?

Сьюзан Чок
источник

Ответы:

11

Не все среды OpenWrt настроены одинаково, поэтому мой ответ - выстрел в темноте ...

Пример вывода взят из OpenWrt-12.09 на TP-Link TL-WDR4300.

ssh в ваш роутер.

Проверьте свои файловые системы.

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 это карта micro SD моей флешки UMTS ... просто проигнорируйте это.

Многие маршрутизаторы прошиваются аналогичным образом, как показано здесь: корневая файловая система, доступная только для чтения, становится доступной для записи посредством оверлейной файловой системы.

Загляни внутрь /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

Этот каталог содержит информацию о дополнительно установленных пакетах. Файлы, заканчивающиеся на, .listявляются списками файлов, установленных пакетом с похожим именем (без .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

Пакет zlibимеет 3 установленных файла.

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

Пакет zlibсодержит 73 Кбайт установленных файлов.

Сырой 1-вкладыш, чтобы склеить все это вместе, и это сокращает выход:

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

НТН!


Добавлено 2014-10-17:

Следующий вывод взят из OpenWrt-12.09 на TP-Link TL-WR703N и показывает, как добавить сортировку вывода по размеру пакета.

Посмотрите, где и как переменная Sвходит в игру ...

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

Опять же: HTH!


Добавлено 2018-01-13:

Вышеуказанный способ был протестирован на OpenWrt-AA.

Теперь , глядя на Lede-17.01 путь изменился: Замена /overlayс /overlay/upperисправлениями этого.

Статус-кво ( opkg-list-user-installed-sorted-by-sizeне как 1-лайнер):

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

Тестовый забег:

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

Открытый вопрос: когда произошло это изменение в /overlayроссийской структуре? LEDE-17 является преемником OpenWrt-CC, и у меня нет систем под управлением OpenWrt. Так что если вам это нужно на OpenWrt-BB или -CC, сначала загляните внутрь /overlay.


источник
Потрясающие! Отсутствует только сортировка ;-)
bonanza
@bonanza ... Пух! Или "simsAWKlabim" в AWKish ... ;-D
4

Основываясь на решении Йети , есть еще одна возможность, которая может быть быстрее. Вместо того, чтобы вычислять размер duдля файлов в listфайле, мы можем использовать объявленный размер в controlфайле.

Что-то вроде моего маленького opkg_sizesсценария

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

Если вы хотите, чтобы вывод был отсортирован, вы можете запустить его через sort:

./opkg_sizes | sort -n

РЕДАКТИРОВАТЬ

Сравнивая результаты моего сценария к йети «S Выявленные различия. Это потому, что он ссылался, /overlay/usr/lib/opkg/infoпока я думал, что /overlayпрефикс не нужен. Ну, я не совсем понимаю, почему, но /usr/lib/opkg/infoдает также системные пакеты, в то время как /overlay/usr/lib/opkg/infoдает только пакеты пользователя.

Итак, если пользователь также заинтересован в системных пакетах, используйте первую версию. Но чтобы получить только пакеты пользователя, просто замените первую строку на:

 cd /overlay/usr/lib/opkg/info

После этого оба сценария ссылаются на одни и те же пакеты, но с разными номерами ... (кроме очевидной разницы между байтами и килобайтами :-))


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

lsпоказывает размер в байтах, duпоказывает размер всех блоков, выделенных файлом.

Цвика
источник
Был задан вопрос, сколько места занимает загруженные пакеты. Удаление пакетов, устанавливаемых во встроенную прошивку, не освобождает место в оверлейной файловой системе. , , , , , По крайней мере, так я интерпретирую вопрос ...
Я согласен с вашим пониманием вопроса. Но я думал, что / оверлей должен отражать реальную систему, возможно, иметь больше информации; но я был удивлен, что он содержит меньше информации.
Цвика,
Кроме того, странно, что 2 метода дают разные числа ...
Zvika
duрассчитывает в гранулярности размера файловой системы. И / overlay - это только часть записи слоев файловой системы.
Хорошо, тогда я предполагаю, что это делает вывод, что ваш ответ лучше ...
Zvika
2

Этот ответ является улучшенной версией ответа Звики . Поскольку исходный код существенно отличается, я считаю, что лучше добавить его в качестве дополнительного ответа, а не редактировать исходный.

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

Исходный код требуется слишком много вилок, что делает его так медленно , как одна секунда. Этот улучшенный код короче и использует только три процесса, что приводит к невероятно быстрому времени выполнения 0,02 с (на моем маршрутизаторе).

Вы можете настроить пути:

  • /overlay/usr/lib/opkg/info/*.control→ установленные пользователем пакеты. Это пакеты, которые можно удалить, чтобы освободить место.
  • /rom/usr/lib/opkg/info/*.control→ системные пакеты. Они не могут быть удалены. (Если вы действительно не знаете, что делаете.) Поскольку они хранятся в разделе только для чтения, их удаление не освободит дополнительное пространство.
  • /usr/lib/opkg/info/*.control → все пакеты.
Денилсон Са Майя
источник
0

Для меня самым простым способом было использование find;

find / -size +500k

с выводом ниже;

# 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

Это были "большие" файлы в моей установке LEDE. Мне нужно было дополнительное пространство на моем маршрутизаторе, чтобы я мог отформатировать, разбить на разделы и смонтировать место на USB-накопителе. Подберите +500kразмер файла, который вам больше подходит.

Johnny5
источник