Bagaimana cara mengetahui ruang disk yang ditempati oleh paket di OpenWrt?


16

Saya mencoba mengkonfigurasi OpenWrt pada perangkat saya dan keluar dari ruang. Saya mengunduh beberapa paket tooling. Sekarang bagaimana saya bisa menentukan bobotnya sehingga memutuskan apa yang harus dihapus?

Apakah mungkin untuk menampilkan ukuran paket yang diinstal dengan OPKG?

Jawaban:


11

Tidak setiap lingkungan OpenWrt sudah diatur dengan cara yang sama, jadi jawaban saya adalah kesempatan ...

Contoh output diambil dari OpenWrt-12.09 pada "TP-Link TL-WDR4300".

ssh ke router Anda.

Periksa file sistem Anda.

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 adalah kartu micro SD tongkat UMTS saya ... abaikan saja.

Banyak router di-flash dengan cara yang mirip seperti yang terlihat di sini: File root readonly dibuat pseudo dapat ditulisi oleh sistem file overlay.

Lihat ke dalam /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

Direktori ini berisi info tentang paket tambahan yang diinstal. File yang diakhiri dengan .listadalah daftar file yang diinstal oleh paket dengan nama yang sama (tanpa .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

Paket zlibmemiliki 3 file yang diinstal.

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

Paket zlibmemiliki 73kbytes file yang diinstal.

1-liner mentah untuk merekatkan semuanya dan ini memperpendek output:

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


Ditambahkan 2014-10-17:

Output berikut diambil dari OpenWrt-12.09 pada "TP-Link TL-WR703N" dan menunjukkan cara menambahkan pengurutan output berdasarkan ukuran paket.

Lihat di mana dan bagaimana variabel Smasuk ke dalam game ...

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

Lagi: HTH!


Ditambahkan 2018-01-13:

Cara di atas diuji pada OpenWrt-AA.

Sekarang melihat LEDE-17,01 jalan telah berubah: Mengganti /overlaydengan /overlay/upperperbaikan ini.

Status quo ( opkg-list-user-installed-sorted-by-sizebukan sebagai 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---"
}

Uji coba:

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

Pertanyaan terbuka: Kapan perubahan /overlaystruktur ini terjadi? LEDE-17 adalah penerus OpenWrt-CC dan saya tidak memiliki sistem runnig OpenWrt. Jadi, jika Anda membutuhkan ini di OpenWrt-BB atau -CC, lihat ke dalam /overlaydulu.


Luar biasa! Hanya pengurutan yang hilang ;-)
bonanza

@bonanza ... Poof! Atau "simsAWKlabim" di AWKish ... ;-D

4

Berdasarkan solusi yeti , ada kemungkinan lain, yang mungkin lebih cepat. Alih-alih menghitung ukuran dengan duuntuk file dalam listfile, kita dapat menggunakan ukuran yang dinyatakan dalam controlfile.

Sesuatu seperti opkg_sizesnaskah kecilku

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

Jika Anda ingin output diurutkan, Anda dapat menjalankannya melalui sort:

./opkg_sizes | sort -n

EDIT

Membandingkan hasil skrip saya dengan perbedaan yeti yang terungkap. Itu karena dia merujuk /overlay/usr/lib/opkg/infosementara saya berpikir bahwa /overlayawalan tidak perlu. Yah, saya tidak sepenuhnya mengerti mengapa, tetapi /usr/lib/opkg/infojuga memberikan paket sistem, sementara /overlay/usr/lib/opkg/infohanya memberikan paket pengguna.

Jadi, jika pengguna tertarik pada paket sistem juga, gunakan versi pertama. Tetapi untuk mencapai hanya paket pengguna, cukup ganti baris pertama ke:

 cd /overlay/usr/lib/opkg/info

Setelah melakukannya, kedua skrip merujuk ke paket yang sama, tetapi dengan nomor yang berbeda ... (selain perbedaan yang jelas antara byte dan kilobyte :-))


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

lsmenunjukkan ukuran dalam byte, dumenunjukkan ukuran semua blok yang dialokasikan oleh file.


Ditanyakan berapa banyak ruang yang diunduh paket yang dikonsumsi. Menghapus paket yang dipasang di firmware yang di-flash tidak membebaskan ruang dalam sistem file overlay. . . . . . Setidaknya ini adalah cara saya menafsirkan pertanyaan ...

Saya setuju dengan pengertian Anda tentang pertanyaan itu. Tapi saya pikir / overlay harus mencerminkan sistem yang sebenarnya, mungkin ada beberapa informasi lagi ; tetapi saya terkejut bahwa itu mengandung lebih sedikit informasi.
Zvika

Juga, aneh bahwa 2 metode memberikan angka yang berbeda ...
Zvika

dudiperhitungkan dalam rincian ukuran sistem berkas. Dan / overlay hanyalah bagian writale dari lapisan filesystem.

Baiklah kalau begitu, saya berasumsi bahwa ini menyimpulkan bahwa jawaban Anda lebih baik ...
Zvika

2

Jawaban ini adalah versi yang lebih baik dari jawaban Zvika . Karena kode sumbernya sangat berbeda, saya yakin lebih baik menambahkannya sebagai jawaban tambahan, daripada mengedit yang asli.

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

The kode asli yang diperlukan terlalu banyak garpu, menjadikannya sebagai lambat satu detik. Kode yang ditingkatkan ini lebih pendek dan hanya menggunakan tiga proses, yang mengarah ke waktu berjalan cepat 0,02s (di router saya).

Anda dapat mengubah jalur:

  • /overlay/usr/lib/opkg/info/*.control→ paket yang diinstal pengguna. Ini adalah paket yang bisa dihapus untuk membebaskan ruang.
  • /rom/usr/lib/opkg/info/*.control→ paket sistem. Ini tidak dapat dihapus. (Kecuali Anda benar - benar tahu apa yang Anda lakukan.) Karena mereka disimpan di partisi read-only, menghapusnya tidak akan membebaskan ruang tambahan.
  • /usr/lib/opkg/info/*.control → semua paket.

0

Bagi saya cara termudah adalah menggunakan find;

find / -size +500k

dengan output di bawah ini;

# 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

Ini adalah file "besar" di instal LEDE saya. Saya membutuhkan ruang ekstra pada router saya sehingga saya dapat memformat, mempartisi, dan me-mount beberapa ruang penyimpanan USB. Sesuaikan +500kdengan ukuran file yang lebih cocok untuk Anda.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.