Не все среды 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
.
Основываясь на решении Йети , есть еще одна возможность, которая может быть быстрее. Вместо того, чтобы вычислять размер
du
для файлов вlist
файле, мы можем использовать объявленный размер вcontrol
файле.Что-то вроде моего маленького
opkg_sizes
сценарияЕсли вы хотите, чтобы вывод был отсортирован, вы можете запустить его через
sort
:РЕДАКТИРОВАТЬ
Сравнивая результаты моего сценария к йети «S Выявленные различия. Это потому, что он ссылался,
/overlay/usr/lib/opkg/info
пока я думал, что/overlay
префикс не нужен. Ну, я не совсем понимаю, почему, но/usr/lib/opkg/info
дает также системные пакеты, в то время как/overlay/usr/lib/opkg/info
дает только пакеты пользователя.Итак, если пользователь также заинтересован в системных пакетах, используйте первую версию. Но чтобы получить только пакеты пользователя, просто замените первую строку на:
После этого оба сценария ссылаются на одни и те же пакеты, но с разными номерами ... (кроме очевидной разницы между байтами и килобайтами :-))
ls
показывает размер в байтах,du
показывает размер всех блоков, выделенных файлом.источник
du
рассчитывает в гранулярности размера файловой системы. И / overlay - это только часть записи слоев файловой системы.Этот ответ является улучшенной версией ответа Звики . Поскольку исходный код существенно отличается, я считаю, что лучше добавить его в качестве дополнительного ответа, а не редактировать исходный.
Исходный код требуется слишком много вилок, что делает его так медленно , как одна секунда. Этот улучшенный код короче и использует только три процесса, что приводит к невероятно быстрому времени выполнения 0,02 с (на моем маршрутизаторе).
Вы можете настроить пути:
/overlay/usr/lib/opkg/info/*.control
→ установленные пользователем пакеты. Это пакеты, которые можно удалить, чтобы освободить место./rom/usr/lib/opkg/info/*.control
→ системные пакеты. Они не могут быть удалены. (Если вы действительно не знаете, что делаете.) Поскольку они хранятся в разделе только для чтения, их удаление не освободит дополнительное пространство./usr/lib/opkg/info/*.control
→ все пакеты.источник
Для меня самым простым способом было использование
find
;с выводом ниже;
Это были "большие" файлы в моей установке LEDE. Мне нужно было дополнительное пространство на моем маршрутизаторе, чтобы я мог отформатировать, разбить на разделы и смонтировать место на USB-накопителе. Подберите
+500k
размер файла, который вам больше подходит.источник