OpenWrtでパッケージが占有するディスク容量を知る方法は?


16

デバイスでOpenWrtを構成しようとして、スペースが不足しました。いくつかのツールパッケージをダウンロードしていました。では、アンインストールするものを決定するために、どのように重みを決定できますか?

OPKGでインストール済みパッケージのサイズを表示することはできますか?

回答:


11

すべてのOpenWrt環境が同じように設定されているわけではないので、私の答えは暗闇でのショットです...

出力例は、「TP-Link TL-WDR4300」上のOpenWrt-12.09から取得したものです。

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 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は73kバイトのインストール済みファイルがあります。

これをすべて一緒に接着する粗い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まず中を見てください。


驚くばかり!ソートのみが欠落している;
大当たり14年

@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

lsバイト単位duのサイズを示し、ファイルによって割り当てられたすべてのブロックのサイズを示します。


ダウンロードしたパッケージがどれだけのスペースを消費しているのか尋ねられました。フラッシュされたファームウェアにインストールされているパッケージを削除しても、オーバーレイファイルシステムのスペースは解放されません。。。。。。少なくとも、これは私が質問... interpretetd方法です

質問に対するあなたの理解に同意します。しかし、私は、実際のシステムを反映すべき/オーバーレイは、おそらくいくつか持っていると思ったより多くの情報を。しかし、情報が少ないことに驚きました。
ズヴィカ14年

また、それは... 2つの方法が異なる番号を与えることを奇妙だ
Zvika

duファイルシステムのブロックサイズの粒度でカウントします。また、/ overlayは、ファイルシステムレイヤーの書き込み部分にすぎません。

OK、その後、私はそれがあなたの答えは...優れていると結論付けていると仮定
Zvika

2

この回答は、Zvikaの回答の改良版です。ソースコードはかなり異なるため、元のコードを編集するのではなく、追加の回答として追加する方が良いと思います。

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

元のコードは、 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.