Làm thế nào để biết không gian đĩa bị chiếm bởi các gói trong OpenWrt?


16

Tôi đang cố gắng định cấu hình OpenWrt trên thiết bị của mình và hết dung lượng. Tôi đã tải xuống một số gói dụng cụ. Bây giờ làm thế nào tôi có thể xác định trọng lượng của chúng để quyết định gỡ cài đặt cái gì?

Có thể hiển thị kích thước của các gói đã cài đặt với OPKG không?

Câu trả lời:


11

Không phải mọi môi trường OpenWrt đều được thiết lập theo cùng một cách, vì vậy câu trả lời của tôi là một cú đánh trong bóng tối ...

Đầu ra ví dụ được lấy từ OpenWrt-12,09 trên "TP-Link TL-WDR4300".

ssh vào bộ định tuyến của bạn.

Kiểm tra fileytsems của bạn.

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 là thẻ micro SD của thanh UMTS của tôi ... chỉ cần bỏ qua điều này.

Nhiều bộ định tuyến được flash theo kiểu tương tự như đã thấy ở đây: Một tập tin gốc chỉ đọc được tạo thành giả có thể ghi được bởi một hệ thống tập tin lớp phủ.

Nhìn vào bên trong /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

Thư mục này chứa thông tin về các gói cài đặt bổ sung. Các tệp kết thúc bằng .listdanh sách các tệp được cài đặt bởi gói có tên tương tự (không có .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

Gói zlibcó 3 tập tin được cài đặt.

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

Gói zlibcó 73kbyte tệp được cài đặt.

Một lớp lót thô để dán tất cả lại với nhau và nó rút ngắn sản lượng:

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


Đã thêm 2014-10-17:

Đầu ra sau đây được lấy từ OpenWrt-12,09 trên "TP-Link TL-WR703N" và chỉ ra cách thêm sắp xếp đầu ra theo kích thước gói.

Có một cái nhìn về nơi và làm thế nào biến Svào trò chơi ...

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

Một lần nữa: HTH!


Đã thêm 2018-01-13:

Cách trên đã được thử nghiệm trên OpenWrt-AA.

Bây giờ nhìn vào LEDE-17.01, một đường dẫn đã thay đổi: Thay thế /overlaybằng cách /overlay/uppersửa lỗi này.

Hiện trạng ( opkg-list-user-installed-sorted-by-sizekhông phải là 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---"
}

Chạy thử nghiệm:

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

Câu hỏi mở: Khi nào sự thay đổi /overlaycấu trúc này xảy ra? LEDE-17 là sự kế thừa của OpenWrt-CC và tôi không có hệ thống nào chạy OpenWrt trong tay. Vì vậy, nếu bạn cần điều này trên OpenWrt-BB hoặc -CC, /overlaytrước tiên hãy xem bên trong .


Tuyệt vời! Chỉ sắp xếp bị thiếu ;-)
bonanza

@bonanza ... gặp sự cố! Hoặc "simsAWKlabim" trong AWKish ... ;-D

4

Dựa trên giải pháp của yeti , có một khả năng khác, đó có thể là nhanh hơn. Thay vì tính kích thước với ducác tệp trong listtệp, chúng ta có thể sử dụng kích thước khai báo trong controltệp.

Một cái gì đó giống như opkg_sizeskịch bản nhỏ của tôi

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

Nếu bạn muốn đầu ra được sắp xếp, bạn có thể chạy nó qua sort:

./opkg_sizes | sort -n

BIÊN TẬP

So sánh kết quả kịch bản của tôi với sự khác biệt được tiết lộ của yeti . Đó là bởi vì anh ấy đã đề cập đến /overlay/usr/lib/opkg/infotrong khi tôi nghĩ rằng /overlaytiền tố là không cần thiết. Chà, tôi không hiểu tại sao, nhưng /usr/lib/opkg/infocũng cung cấp các gói hệ thống, trong khi /overlay/usr/lib/opkg/infochỉ cung cấp các gói của người dùng.

Vì vậy, nếu người dùng cũng quan tâm đến các gói hệ thống, hãy sử dụng phiên bản đầu tiên. Nhưng để chỉ đạt được các gói của người dùng, chỉ cần thay thế dòng đầu tiên thành:

 cd /overlay/usr/lib/opkg/info

Sau khi làm như vậy, cả hai tập lệnh đều tham chiếu đến cùng một gói, nhưng với các số khác nhau ... (bên cạnh sự khác biệt rõ ràng giữa byte và 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

lshiển thị kích thước tính bằng byte, duhiển thị kích thước của tất cả các khối được phân bổ bởi tệp.


Nó được hỏi có bao nhiêu không gian tải xuống gói đang liên kết. Loại bỏ các gói đang được cài đặt trong chương trình cơ sở flashed không có không gian trống trong hệ thống tập tin lớp phủ. . . . . . Ít nhất đây là cách tôi diễn giải câu hỏi ...

Tôi đồng ý với sự hiểu biết của bạn về câu hỏi. Nhưng tôi nghĩ / lớp phủ sẽ phản ánh hệ thống thực, có thể có thêm một số thông tin; nhưng tôi đã ngạc nhiên rằng nó chứa ít thông tin hơn .
Zvika

Ngoài ra, thật kỳ lạ khi 2 phương pháp cho các số khác nhau ...
Zvika

duđếm trong hệ thống tập tin khối kích thước chi tiết. Và / lớp phủ chỉ là phần viết của các lớp hệ thống tập tin.

Được rồi, tôi cho rằng nó kết luận rằng câu trả lời của bạn tốt hơn ...
Zvika

2

Câu trả lời này là phiên bản cải tiến của câu trả lời của Zvika . Vì mã nguồn là khác nhau đáng kể, tôi tin rằng tốt hơn là thêm nó dưới dạng một câu trả lời bổ sung, thay vì chỉnh sửa của mã gốc.

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

Các mã ban đầu đòi hỏi quá nhiều dĩa, làm cho nó chậm như một giây. Mã cải tiến này ngắn hơn và chỉ sử dụng ba quy trình, dẫn đến thời gian chạy nhanh là 0,02 giây (trên bộ định tuyến của tôi).

Bạn có thể điều chỉnh các đường dẫn:

  • /overlay/usr/lib/opkg/info/*.control→ gói do người dùng cài đặt. Đây là những gói có thể được gỡ bỏ để giải phóng không gian.
  • /rom/usr/lib/opkg/info/*.control→ gói hệ thống. Chúng không thể được gỡ cài đặt. (Trừ khi bạn thực sự biết những gì bạn đang làm.) Vì chúng được lưu trữ trong phân vùng chỉ đọc, loại bỏ chúng sẽ không giải phóng thêm không gian.
  • /usr/lib/opkg/info/*.control → tất cả các gói.

0

Đối với tôi cách dễ nhất là sử dụng find;

find / -size +500k

với đầu ra bên dưới;

# 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

Đây là những tập tin "lớn" trong bản cài đặt LEDE của tôi. Tôi cần thêm dung lượng trên bộ định tuyến để có thể định dạng, phân vùng và gắn một số không gian lưu trữ USB. Điều chỉnh +500kkích thước tập tin phù hợp hơn với bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.