จะทราบพื้นที่ว่างของแพ็คเกจใน OpenWrt ได้อย่างไร?


16

ฉันพยายามกำหนดค่า OpenWrt บนอุปกรณ์ของฉันและออกจากพื้นที่ ฉันดาวน์โหลดชุดเครื่องมือบางชุด ตอนนี้ฉันจะกำหนดน้ำหนักของพวกเขาได้อย่างไรเพื่อตัดสินใจว่าจะถอนการติดตั้งอย่างไร

เป็นไปได้หรือไม่ที่จะแสดงขนาดของแพ็คเกจที่ติดตั้งด้วย OPKG?

คำตอบ:


11

ไม่ใช่ทุกสภาพแวดล้อมของ OpenWrt ที่ตั้งค่าไว้เหมือนกันดังนั้นคำตอบของฉันคือภาพในที่มืด ...

ตัวอย่างเอาต์พุตถูกนำมาจาก OpenWrt-12.09 บน "TP-Link TL-WDR4300"

ssh ลงในเราเตอร์ของคุณ

ตรวจสอบ filesytsems ของคุณ

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 ของฉัน ... เพียงละเว้นสิ่งนี้

เราเตอร์จำนวนมากจะกระพริบในลักษณะคล้ายกันดังที่เห็นในที่นี้: filesytem รูทแบบอ่านอย่างเดียวถูกสร้างขึ้นโดยใช้ระบบไฟล์แบบซ้อนทับหลอกแบบเขียนได้

ดูข้างใน/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มีไฟล์ที่ติดตั้ง 73kbytes

น้ำมันดิบ 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!


เพิ่ม 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

แก้ไข

เปรียบเทียบผลสคริปต์ของฉันกับความแตกต่างที่เปิดเผยของเยติ เป็นเพราะเขาพูดถึง/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

คำตอบนี้เป็นรุ่นปรับปรุงของคำตอบของ Zvika เนื่องจากซอร์สโค้ดมีความแตกต่างอย่างมีนัยสำคัญฉันเชื่อว่ามันเป็นการดีกว่าที่จะเพิ่มเป็นคำตอบเพิ่มเติมแทนที่จะแก้ไขต้นฉบับ

#!/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เป็นขนาดไฟล์ที่เหมาะกับคุณมากขึ้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.