Як дізнатись простір на диску, зайнятий пакетами в 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 є мікро 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---

HTH!


Додано 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!


Додано 13.01.2018:

Вищеописаний спосіб був протестований на 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

На основі рішення yeti є ще одна можливість, яка може бути швидшою. Замість обчислення розміру 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

EDIT

Порівнюючи результати мого сценарію з виявленими розбіжностями yeti . Це тому, що він посилався, /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показує розмір усіх блоків, виділених файлом.


Було запитано, скільки споживають завантажених пакетів. Видалення пакетів, встановлених у прошивці, не звільняє місця у файловій системі накладання. . . . . . Принаймні, так я

Я згоден з вашим розумінням питання. Але я думав , що / накладка повинна відображати реальну систему, може бути , є більше інформації; але мене здивувало, що воно містить менше інформації.
Zvika

Крім того, дивно, що два методи дають різні числа ...
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розмір файлу, який вам більше підходить.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.