无忧启动论坛

标题: 不使用外部命令,如何使用Grub4DOS获取分区容量? [打印本页]

作者: 邪恶海盗    时间: 2020-3-17 12:21
标题: 不使用外部命令,如何使用Grub4DOS获取分区容量?
RT,使用find和ls dev分别可以列出分区和磁盘,但如果想要显示容量该怎么做?

作者: 邪恶海盗    时间: 2020-3-17 13:28


ls 和 find 结果怎么不一样???
作者: dsfgamesky    时间: 2020-3-17 15:24
ls dev是用于显示设备列表(更新说明上说的)
然后find查找所有设备的所有分区
还有,貌似没有显示容量的语句。。。
作者: 邪恶海盗    时间: 2020-3-17 15:40
dsfgamesky 发表于 2020-3-17 15:24
ls dev是用于显示设备列表(更新说明上说的)
然后find查找所有设备的所有分区
还有,貌似没有显示容量的 ...

1.你说的我知道,但二者显示的不一样你没发现么?
2.没有么?
作者: chenall    时间: 2020-3-17 16:43
获取当前分区的大小。
cat --length=0 ()-1


作者: 邪恶海盗    时间: 2020-3-17 16:54
chenall 发表于 2020-3-17 16:43
获取当前分区的大小。
cat --length=0 ()-1

只适用于当前分区???

另外你发现没有,ls dev 和 find执行结果有区别,PXE启动不应该是(pd)么?
作者: dsfgamesky    时间: 2020-3-17 18:34
本帖最后由 dsfgamesky 于 2020-3-17 18:40 编辑
邪恶海盗 发表于 2020-3-17 16:54
只适用于当前分区???

另外你发现没有,ls dev 和 find执行结果有区别,PXE启动不应该是(pd)么?

ls dev只获得设备列表,就是
假设电脑上有1个硬盘,3个分区
ls dev只显示(hd0) (rd)(随机存储的地方),find显示(hd0,0)(hd0,1)(hd0,2)

作者: 邪恶海盗    时间: 2020-3-17 18:39
dsfgamesky 发表于 2020-3-17 18:34
ls dev只获得设备列表,就是
假设电脑上有1个硬盘,3个分区
ls dev只显示(hd0),find显示(hd0,0)(hd0,1 ...

你说的我都知道,我不知道你们看不看得到我发的图,很明显的差异...
作者: dsfgamesky    时间: 2020-3-17 18:45
邪恶海盗 发表于 2020-3-17 18:39
你说的我都知道,我不知道你们看不看得到我发的图,很明显的差异...

ls dev的rd,就是random drive,至于有什么用……我忘了,pd就是 PXE drive,hd0就是hard drive 0
find出来的(hd0)和上面的一样(不应该是(hd0,0)么?),但是(wd)……我也不知道
作者: 邪恶海盗    时间: 2020-3-17 18:52
dsfgamesky 发表于 2020-3-17 18:45
ls dev的rd,就是random drive,至于有什么用……我忘了,pd就是 PXE drive,hd0就是hard drive ...

SO...
作者: dsfgamesky    时间: 2020-3-17 18:56
chenall 发表于 2020-3-17 16:43
获取当前分区的大小。
cat --length=0 ()-1

按理说()代表当前设备,但是我换成(hd0)(电脑上有这个设备),就显示不了,说Filename must be either an absolute pathname or blocklist,这是什么鬼,而且,我用cat --length=0 ()-1显示Filesize is 0x100000,我这个8G优盘……才这么点儿吗(((φ(◎ロ◎;)φ)))
作者: dsfgamesky    时间: 2020-3-17 18:57
邪恶海盗 发表于 2020-3-17 18:52
SO...

So...I don't now...
作者: 邪恶海盗    时间: 2020-3-17 23:12
dsfgamesky 发表于 2020-3-17 18:56
按理说()代表当前设备,但是我换成(hd0)(电脑上有这个设备),就显示不了,说Filename must be either a ...


我这运行结果更怪...

作者: 不点    时间: 2020-3-19 18:14
dsfgamesky 发表于 2020-3-17 18:45
ls dev的rd,就是random drive,至于有什么用……我忘了,pd就是 PXE drive,hd0就是hard drive ...

rd 不是 “随机驱动器”,而是 ram-drive(内存盘)。此 rd 内存盘只在 grub4dos 环境下是可见的,在 DOS 层面是不可见的。这是因为,rd 是 grub4dos 的内部盘号,不是 bios 盘号,它没有挂到 BIOS 的 int13 钩子上。
作者: 不点    时间: 2020-3-19 18:20
邪恶海盗 发表于 2020-3-17 16:54
只适用于当前分区???

另外你发现没有,ls dev 和 find执行结果有区别,PXE启动不应该是(pd)么?

我这么理解:chenall 给出的,是一个思路,只是举例罢了。
实际应用的范围,有可能很大。你可以试试:

cat  --length=0   (hd0,6)-1

之类的用法。


作者: 不点    时间: 2020-3-19 18:29
dsfgamesky 发表于 2020-3-17 18:56
按理说()代表当前设备,但是我换成(hd0)(电脑上有这个设备),就显示不了,说Filename must be either a ...

0x1000000 个扇区 = 0x1000000 * 512 = 8G

因此,你应该是漏掉了一个 0,它应该显示 Filesize is 0x1000000 (有 6 个 0)。




作者: 不点    时间: 2020-3-19 18:32
邪恶海盗 发表于 2020-3-17 23:12
我这运行结果更怪...

可以向 chenall 报告 bug。
作者: 不点    时间: 2020-3-19 18:39
邪恶海盗 发表于 2020-3-17 16:54
只适用于当前分区???

另外你发现没有,ls dev 和 find执行结果有区别,PXE启动不应该是(pd)么?

我这么想:

ls 与 find,为什么要显示相同的信息呢?两条命令,各有自己的目的。

显示不同,是正常的。

ls dev,我猜它的意思,就是显示设备。

find 是寻找符合条件的设备。find 不搜索 pd 设备(除非 pd 是当前设备)。


作者: dsfgamesky    时间: 2020-3-19 19:40
不点 发表于 2020-3-19 18:14
rd 不是 “随机驱动器”,而是 ram-drive(内存盘)。此 rd 内存盘只在 grub4dos 环境下是可见的,在 DOS ...

感谢不点大的讲解,应该是我记错了。
sratlf的帮助手册上是这么写的
(md)     内存驱动器,实现了将整个内存作为一个磁盘驱动器来访问。(预留驱动器号 0xffff )
(rd)     随机存贮驱动器。(md) 设备访问内存是从物理地址 0 开始,而 (rd) 可以访问起始于任何基地址的内存。
然后我就这样说了。


作者: 邪恶海盗    时间: 2020-3-19 22:51
不点 发表于 2020-3-19 18:39
我这么想:

ls 与 find,为什么要显示相同的信息呢?两条命令,各有自己的目的。

我估计你跟他们一样没看图,我说的不是真正的 ls 和 find 命令,而是特定情况下的结果...
作者: 邪恶海盗    时间: 2020-3-19 23:18
不点 发表于 2020-3-19 18:29
0x1000000 个扇区 = 0x1000000 * 512 = 8G

因此,你应该是漏掉了一个 0,它应该显示 Filesize is 0x10 ...




作者: 2011yaya2007777    时间: 2020-3-20 08:40
本帖最后由 2011yaya2007777 于 2020-3-20 08:50 编辑

cat --length=0 ()-1
返回当前分区起始(字节)
对于光盘来说,就是0。

cat --length=0 ()
返回当前分区尺寸(字节)

作者: dsfgamesky    时间: 2020-3-20 15:02
邪恶海盗 发表于 2020-3-19 22:51
我估计你跟他们一样没看图,我说的不是真正的 ls 和 find 命令,而是特定情况下的结果...

我已经有很认真的看图了
真正的 ls 和 find 命令
是什么意思啊?
而是特定情况下的结果...
特定又是什么意思?
作者: dsfgamesky    时间: 2020-3-20 15:05
本帖最后由 dsfgamesky 于 2020-3-20 15:07 编辑
邪恶海盗 发表于 2020-3-19 23:18

find查找的是文件,而不是磁盘名称
作者: 不点    时间: 2020-3-20 15:20
dsfgamesky 发表于 2020-3-19 19:40
感谢不点大的讲解,应该是我记错了。
sratlf的帮助手册上是这么写的然后我就这样说了。

哦,明白了。把 RAM 说成 “随机存储器”,也是没问题的。但一般都会把它说成 “内存” 吧。

因此,通俗地说,RAM Drive 就是 “内存盘” 了。如果说成 “随机存储器驱动器”,感觉不太容易理解。


作者: 邪恶海盗    时间: 2020-3-20 21:57
dsfgamesky 发表于 2020-3-20 15:05
find查找的是文件,而不是磁盘名称

反正磁盘名称出来了就行了
作者: 邪恶海盗    时间: 2020-3-20 21:58
不点 发表于 2020-3-20 15:20
哦,明白了。把 RAM 说成 “随机存储器”,也是没问题的。但一般都会把它说成 “内存” 吧。

因此,通 ...

一个随机存储/内存区域可能比较准确,md才是内存盘吧?
作者: 邪恶海盗    时间: 2020-3-20 21:58
dsfgamesky 发表于 2020-3-20 15:02
我已经有很认真的看图了
是什么意思啊?
特定又是什么意思?

就是我这个示例中的结果...
作者: dsfgamesky    时间: 2020-3-21 08:39
2011yaya2007777 发表于 2020-3-20 08:40
cat --length=0 ()-1
返回当前分区起始(字节)
对于光盘来说,就是0。

"()"换成"(hd0,0)"为什么用不了?
作者: dsfgamesky    时间: 2020-3-21 08:47
邪恶海盗 发表于 2020-3-20 21:58
就是我这个示例中的结果...

我的结果和你示例中的结果一样,抱歉,我实在理解不了你的意思。


作者: 不点    时间: 2020-3-21 12:53
很可能,chenall 只是实现了当前盘 ()的处理,而没有实现(hdx,y)之类的处理。

那就曲径通幽,先把目标盘设为当前盘,计算完,再恢复原先的当前盘。

作者: 邪恶海盗    时间: 2020-3-21 16:39
dsfgamesky 发表于 2020-3-21 08:47
我的结果和你示例中的结果一样,抱歉,我实在理解不了你的意思。

我指的是那个(wd)...
作者: dsfgamesky    时间: 2020-3-21 16:42
邪恶海盗 发表于 2020-3-21 16:39
我指的是那个(wd)...

这个我也不知道……
作者: 邪恶海盗    时间: 2020-3-21 16:42
本帖最后由 邪恶海盗 于 2020-3-21 16:44 编辑
不点 发表于 2020-3-21 12:53
很可能,chenall 只是实现了当前盘 ()的处理,而没有实现(hdx,y)之类的处理。

那就曲径通幽,先把 ...

这样我感觉容易出错啊,假如是这样:
map---***root--***
hd0=111
hd1=222
hd2=333

root--***
后面还能保证上面的对应关系么?

作者: 不点    时间: 2020-3-24 10:23
邪恶海盗 发表于 2020-3-21 16:42
这样我感觉容易出错啊,假如是这样:
map---***root--***
hd0=111

你在 map 之前,先用 root 命令切换当前分区,再用 chenall 的方法(以及前面 yaya 给出的说明),就可以搞定各个分区的起始位置和长度。

map 之后,虚拟盘里面还需要这些东西吗?不需要了吧?

虚拟盘里面的内容,你是完全知道的。在执行 map 之前,你都知道了即将进行虚拟的那个 img 的内容。

这么说来,就没有什么新问题了,全都能够搞定。只不过需要细致地学习、研究 grub4dos 的知识而已。

作者: 不点    时间: 2020-3-24 11:16
本帖最后由 不点 于 2020-3-24 11:30 编辑

老眼昏花,居然没看见你们图片上的 (wd),还以为是 (ud)

这 (wd) 是哪个开发者增加的?

新版 grub4dos 会不会有这个 (wd)?

如果不是官方发布的 grub4dos,那有可能被第三方开发者修改了。你从哪里得到的 grub4dos,你就向哪里询问(询问其开发者)。

------------------------

md 和 rd 都是内存盘,只不过有差别。md 和 rd 是为了使用方便而设计的两个内存盘,各有用处。

印像中,md 起始于物理地址 0,终止于第一个连续内存块的结尾。BIOS 的内存块布局情况,可以用 displaymem 来显示。有些 BIOS,它的第一个连续内存块很小,那么,md 的容量也就会很小。(补充:所谓 “第一个连续内存块”,是指从 1M 开始的第一个连续的扩展内存块,不是指 0~640K 这段常规内存;我们假定 1M 以内没有内存盲区,即,全都是存在的,只不过 ROM 内存是只读的而已)

rd 是用户可以手动指定起始位置和长度的。这是长处,也是短处。用户如果指定的位置不合适(并且写入到不该写入的内存地址),就有可能对 BIOS 的整个内存系统造成破坏,甚至造成 BIOS 死机、失常、无法工作等问题。因为用户可以随意指定 rd 的起始位置和长度,所以,rd 还有可能被指定到一些不存在的内存区域,同样会出现各种故障或失败。


作者: chenall    时间: 2020-3-24 12:57
wd印像中应该是我添加的,主要用于ipxe启动,正常情况下不用理会。
我当时的思路应该是如下(有点记不太清楚了)
pd 使用grub4dos的方法来访问pxe服务器。
wd 使用ipxe的驱动来访问pxe服务器。

有兴趣的可以对比测试一下,相同的条件下,看看有没有什么区别,当时印像中好像是使用wd速度会快一些。
作者: chenall    时间: 2020-3-24 13:02
邪恶海盗 发表于 2020-3-21 16:42
这样我感觉容易出错啊,假如是这样:
map---***root--***
hd0=111

印像中 find 命令好像是可以加一个其它命令使用的。

意思就是find成功就运行该命令(并且运行该命令的root就是当前成功的磁盘)

使用这个就可以实现你想要的功能,并且不会影响到现有root

好久没有用了,也不知记忆有没有出错。


作者: 邪恶海盗    时间: 2020-3-24 13:08
不点 发表于 2020-3-24 11:16
老眼昏花,居然没看见你们图片上的 (wd),还以为是 (ud)

这 (wd) 是哪个开发者增加的?


测试(wd)还是有...

作者: 邪恶海盗    时间: 2020-3-24 13:23
chenall 发表于 2020-3-24 13:02
印像中 find 命令好像是可以加一个其它命令使用的。

意思就是find成功就运行该命令(并且运行该命令的 ...

find --set-root???

0000:82B0        8字节(即四字) 最后访问的分区的扇区总数
说明里有个这个,暂时还不知道怎么用

作者: 邪恶海盗    时间: 2020-3-24 13:26
chenall 发表于 2020-3-24 12:57
wd印像中应该是我添加的,主要用于ipxe启动,正常情况下不用理会。
我当时的思路应该是如下(有点记不太清 ...

快不快我不知道咋测,但至少这个wd的定义不太准确,我在本地PXE启动时没有这个,云端PXE启动时就有
作者: chenall    时间: 2020-3-24 13:43
邪恶海盗 发表于 2020-3-24 13:26
快不快我不知道咋测,但至少这个wd的定义不太准确,我在本地PXE启动时没有这个,云端PXE启动时就有

只有使用ipxe启动grldr才会有,之前的定义应该是 web drive

早期刚加上ipxe的时候有用到,因为当时还不能识别是pxe或ipxe环境,后面的版本有做了一些处理,应该就没有什么用了。
作者: 邪恶海盗    时间: 2020-3-24 14:04
chenall 发表于 2020-3-24 13:43
只有使用ipxe启动grldr才会有,之前的定义应该是 web drive

早期刚加上ipxe的时候有用到,因为当时还 ...

我本地也是iPXE启动的,就没有这个(wd)...
作者: 不点    时间: 2020-3-24 15:50
chenall 发表于 2020-3-24 13:02
印像中 find 命令好像是可以加一个其它命令使用的。

意思就是find成功就运行该命令(并且运行该命令的 ...

确实如此,find 找到文件后,就在那个分区上运行命令,所以,find 命令行里面的 () 就是那个分区。

比如

find  /bootmgr /bootmgr
也可以写成
find  /bootmgr  ()/bootmgr

都是找到 /bootmgr 后,运行那个找到的 bootmgr。这里要说的是,() 表示的就是找到后的 “当前位置”。





欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3