OpenWrt에서 패키지가 차지하는 디스크 공간을 아는 방법은 무엇입니까?


16

장치에서 OpenWrt를 구성하려고하는데 공간이 부족합니다. 툴링 패키지를 다운로드하고있었습니다. 이제 제거 할 대상을 결정하기 위해 가중치를 어떻게 확인할 수 있습니까?

OPKG와 함께 설치된 패키지의 크기를 표시 할 수 있습니까?

답변:


11

모든 OpenWrt 환경이 같은 방식으로 설정되는 것은 아니므로 제 대답은 어둠 속에서 한 번입니다

예제 출력은 "TP-Link TL-WDR4300"의 OpenWrt-12.09에서 가져옵니다.

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 UMTS 스틱의 마이크로 SD 카드입니다. 그냥 무시하십시오.

많은 라우터는 다음과 같이 비슷한 방식으로 깜박입니다. 읽기 전용 루트 파일 시스템은 오버레이 파일 시스템에 의해 의사 쓰기 가능합니다.

안으로 봐 /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 추가 :

다음 출력은 "TP-Link TL-WR703N"의 OpenWrt-12.09에서 가져온 것으로 패키지 크기별로 출력을 정렬하는 방법을 보여줍니다.

변수 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-size1- 라이너가 아님) :

#!/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 ... 똥! 또는 AWKish의 "simsAWKlabim"... ;-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

편집하다

내 스크립트 결과를 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

lsdu파일에 의해 할당 된 모든 블록 의 크기를 바이트 단위로 보여줍니다.


다운로드 한 패키지가 얼마나 많은 공간을 차지하고 있는지 묻습니다. 플래시 펌웨어에 설치된 패키지를 제거해도 오버레이 파일 시스템의 공간이 확보되지 않습니다. . . . . . 적어도 이것이 내가 질문을 해석하는 방식이다.

질문에 대한 귀하의 이해에 동의합니다. 그러나 나는 / overlay가 실제 시스템을 반영해야한다고 생각했다. 아마도 더 많은 정보 가있을 것이다 . 그러나 정보 가 적다 는 사실에 놀랐습니다 .
Zvika

또한, 두 가지 방법이 다른 숫자를 나타내는 것은 이상합니다.
Zvika

du파일 시스템 블록 크기 단위로 계산합니다. 그리고 / overlay는 파일 시스템 계층의 잔인한 부분 일뿐입니다.

그럼, 당신의 대답이 더 낫다고 결론을 내립니다.
Zvika

2

이 답변은 Zvika 's answer의 개선 된 버전입니다 . 소스 코드는 실질적으로 다르기 때문에 원본 코드를 편집하는 대신 추가 답변으로 추가하는 것이 좋습니다.

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

원래 코드는 일초으로 느린로하고, 너무 많은 포크가 필요했다. 이 개선 된 코드는 더 짧고 3 개의 프로세스 만 사용하므로 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.