[已猜测]initrd.gz 里的 lzop 是哪里来的?我全盘搜索都没找到这个文件名

最大的社区版本,Ubuntu的发源地
回复
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

[已猜测]initrd.gz 里的 lzop 是哪里来的?我全盘搜索都没找到这个文件名

#1

帖子 科学之子 » 2017-09-30 20:12

initrd.gz 里的 lzop 是哪里来的?我全盘搜索都没找到这个文件名
貌似跟busybox有关
但initrd解压后lzop并非符号链接,而是文件.

代码: 全选

$ lsinitramfs ./initrd.img-4.9.0-3-686 |grep lzop
bin/lzop
bin/lzopcat
bin/unlzop

代码: 全选

$ find -xdev -name '*lzop*' 2>/dev/null
./usr/share/mime/application/x-lzop.xml
./usr/share/bash-completion/completions/lzop
Sat Sep 30 22:18:27 CST 2017补充:
原来是硬链接

代码: 全选

$ stat ./lzop
  File: ./lzop
  Size: 625828    	Blocks: 1224       IO Block: 4096   regular file
Device: 802h/2050d	Inode: 1701751     Links: 205
Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2017-09-30 18:38:40.829733896 +0800
Modify: 2016-04-17 23:37:24.000000000 +0800
Change: 2017-09-30 18:38:30.733567307 +0800
 Birth: -
Sat Sep 30 22:47:38 CST 2017补充:
理论上lzop是链接到busybox的硬链接
但是:

代码: 全选

$ lsinitramfs -l /boot/initrd.img-4.9.0-3-686-pae | grep 625828
-rwxr-xr-x 205 root     root       625828 Apr 17  2016 bin/chvt
$ lsinitramfs -l /boot/initrd.img-4.9.0-3-686-pae | grep busybox
-rwxr-xr-x 205 root     root            0 Apr 17  2016 bin/busybox
只有chvt有大小,似乎连接到chvt上了?尽管chvt和busybox的md5sum是一样的

代码: 全选

$ md5sum ./chvt ./busybox 
bba2dfaf2332e06b5961393a7a90f304  ./chvt
bba2dfaf2332e06b5961393a7a90f304  ./busybox
根据这个介绍:
http://blog.csdn.net/longerzone/article ... s/23870297
似乎硬链接和原始文件没有办法进行有效区分
故此猜测可能是cpio处理时把chvt当成第一个或"原始"文件了.
上次由 科学之子 在 2017-09-30 23:07,总共编辑 5 次。
头像
astolia
论坛版主
帖子: 6396
注册时间: 2008-09-18 13:11

Re: initrd.gz 里的 lzop 是哪里来的?我全盘搜索都没找到这个文件名

#2

帖子 astolia » 2017-09-30 20:53

你咋不看看文件在initrd.gz中的大小?

代码: 全选

lsinitramfs -l ./initrd.img-4.9.0-3-686 |grep lzop
或者你看看解压后的大小,有没有和其他文件一样的?
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

Re: initrd.gz 里的 lzop 是哪里来的?我全盘搜索都没找到这个文件名

#3

帖子 科学之子 » 2017-09-30 22:26

astolia 写了:你咋不看看文件在initrd.gz中的大小?

代码: 全选

lsinitramfs -l ./initrd.img-4.9.0-3-686 |grep lzop
或者你看看解压后的大小,有没有和其他文件一样的?
原来lzop是硬链接
不过为什么lsinitramfs -l 显示的busybox大小是0?
通过搜索文件大小看chvt才有大小?

代码: 全选

$ lsinitramfs -l /boot/initrd.img-4.9.0-3-686-pae | grep 625828
-rwxr-xr-x 205 root     root       625828 Apr 17  2016 bin/chvt
$ lsinitramfs -l /boot/initrd.img-4.9.0-3-686-pae | grep busybox
-rwxr-xr-x 205 root     root            0 Apr 17  2016 bin/busybox
头像
astolia
论坛版主
帖子: 6396
注册时间: 2008-09-18 13:11

Re: [已猜测]initrd.gz 里的 lzop 是哪里来的?我全盘搜索都没找到这个文件名

#4

帖子 astolia » 2017-10-05 13:59

自己做个实验不就明白了?

代码: 全选

$ mkdir /tmp/test
$ cd /tmp/test
$ echo test > a
$ ln a b
$ ls *
a  b
$ ls * | sort -r
b
a
$ ls * | cpio -o --format=newc > /tmp/a
1 block
$ ls * | sort -r | cpio -o --format=newc > /tmp/b
1 block
$ cpio -tv < /tmp/a
-rw-rw-r--   2 xxx      xxx             0 Oct  5 13:55 a
-rw-rw-r--   2 xxx      xxx             5 Oct  5 13:55 b
1 block
$ cpio -tv < /tmp/b
-rw-rw-r--   2 xxx      xxx             0 Oct  5 13:55 b
-rw-rw-r--   2 xxx      xxx             5 Oct  5 13:55 a
1 block
往cpio里面喂的时候,谁在后面谁有实际大小
头像
astolia
论坛版主
帖子: 6396
注册时间: 2008-09-18 13:11

Re: [已猜测]initrd.gz 里的 lzop 是哪里来的?我全盘搜索都没找到这个文件名

#5

帖子 astolia » 2017-10-05 14:20

另外也和cpio时选的format有关系。其他格式有可能第一个有,也有可能全都有
回复