사용할 수 없는 경우 /proc/config.gz
실행 중인 커널이 압축 후 사용할 수 있는 압축 해제 알고리즘을 어떻게 알 수 있습니까 cpio
initramfs
?
gzip
커널을 구축할 때 알고리즘을 사용할 수 없더라도 알고리즘은 항상 사용할 수 있습니까 CONFIG_DECOMPRESS_GZIP
?y
답변1
압축 알고리즘은 다음에서 선언됩니다.lib/decompress.c
. Gzip은 다음에 정의되어 있습니다.lib/decompress_inflate.c
커널이 컴파일될 때만 CONFIG_DECOMPRESS_GZIP
존재하며 특별한 상태를 얻지 못합니다.y
사용 가능한 압축 알고리즘 목록은 다음과 같습니다.compressed_formats
구조. 정의되어 있으므로 static
다른 소스 파일에서는 사용할 수 없습니다. 따라서 이를 사용하는 유일한 함수는 decompress_method
함수 lib/decompress.c
자체입니다. 따라서 커널이 지원되는 알고리즘 테이블을 사용하도록 하는 유일한 방법은 적절한 2바이트 매직 시퀀스로 시작하는 항목의 압축을 풀고 함수가 알고리즘 이름을 반환하는지 확인하는 것입니다.
/proc/kallsyms
커널 기호 목록( )을 검색하면 어떤 압축 해제 기능이 지원되는지 확인할 수 있습니다 . 기능은 그 자체로 식별되지 않으므로 기호 이름 목록을 구워야 합니다.
</proc/kallsyms cut -d " " -f 3 |
grep -xF -e gunzip -e bzip2 -e unlzma -e unxz -e unlzo -e unlz4
답변2
엉뚱한 승리:
samveen@x230:~ $ awk '/^name/{n=$3}/^type/{if($3=="compression"){print n}}' </proc/crypto
lz4
lzo-rle
lzo
deflate
compress_null
설명하다:
/proc/crypto
라벨이 붙은 커널 알고리즘을 인쇄합니다 type
compression
.
참고: /proc
예언제나다음과 같이 사용할 수 있습니다.모든 linux
initrd
또는 컨테이너(예: )를 통한 커널 기반 환경 docker
이므로 이 방법은 모든 최신 커널에서 작동해야 합니다.
경고 사항:
답변3
sys/power/tuxonice/compression 디렉토리로 이동하면 어떤 유형의 압축이 있는지 확인할 수 있습니다. 거기에는 알고리즘이라는 파일이 들어 있고 여기에는 압축 해제 유형이 포함되어 있습니다. 저에게는 lzo로 작성되었습니다.