OB/loongson重新挂载disklabel分区的问题

BSD当然要运行在RISC平台上,主要讨论但不限于 ARM,MIPS,PowerPC,SPARC
头像
unreal
银 Ag
帖子: 1079
注册时间: 2010-06-07 18:52

OB/loongson重新挂载disklabel分区的问题

帖子 unreal » 2011-11-30 23:37

OS版本:4.9snapshot/loongson
遭遇问题的梗概:准备全新安装5.0,先挂载ob引导器所在的分区wd0i到/mnt,进/mnt/boot,改了启动菜单,然后(到出问题的关键一步~)想备份一些文件到u盘,于是挂载sd1i 到/mnt :o ls看到wd0i的文件和目录:confused: 这才想起没先卸载它。于是第一次卸载/mnt并拔去u盘,再次卸载/mnt 遇提示device busy,这时想用df看看挂载点,然后df就挂了阿,死活退不出阿,只能又来硬关机阿—_—

重复挂载时系统无报错,是否可认为此操作合法?但在卸载时是否应该先进先出呢?而我当时受x86堆栈的概念影响认为先出的是u盘,所以才出问题?求各位仁兄指教。
勤能補拙 Just do it now!

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

回复: 一个挂载点重复挂载的问题

帖子 leo » 2011-12-01 12:30

只是全新安装,龙芯真那么复杂?还需要重新挂载分区?

头像
unreal
银 Ag
帖子: 1079
注册时间: 2010-06-07 18:52

回复: 一个挂载点重复挂载的问题

帖子 unreal » 2011-12-01 15:30

不是龙芯太复杂,而是小弟太废柴…囧
罪过罪过,leo兄不要被我误导了阿。是我忘记卸载又再次挂载才弄出这等问题来,龙芯比x86pc简单很多。acheng看到了估计得笑喷:D
勤能補拙 Just do it now!

头像
unreal
银 Ag
帖子: 1079
注册时间: 2010-06-07 18:52

回复: 一个挂载点重复挂载的问题

帖子 unreal » 2011-12-03 0:54

disklabel 的 -f 该怎么用阿?安装的时候没做/home分区,现把剩余硬盘空间建个分区,但disklabel的n参数说欲指定挂载点必先使用 -f ,man手册看了数遍真不懂⊙_⊙,不知道参数后面要跟什么文件,求帮助T_T
勤能補拙 Just do it now!

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

回复: 一个挂载点重复挂载的问题

帖子 leo » 2011-12-05 14:17

我还真没有这样试过,而且也不太明白unreal兄您的意思,是想全新安装5.0但还要保留原有 /home 分区还是只是想从4.9升级到5.0?抑或是想利用原来分区时保留的磁盘空间?

头像
acheng
锌 Zn
帖子: 581
注册时间: 2011-07-07 21:52

回复: 一个挂载点重复挂载的问题

帖子 acheng » 2011-12-05 21:28

leo 写了:只是全新安装,龙芯真那么复杂?还需要重新挂载分区?
其实loongson的安装过程和X86是一样的,只是由于它的上网本一般没有光驱,且它的BIOS(PMON)只认ext2分区,才导致一些小的问题。

头像
acheng
锌 Zn
帖子: 581
注册时间: 2011-07-07 21:52

回复: 一个挂载点重复挂载的问题

帖子 acheng » 2011-12-05 21:56

unreal 写了:disklabel 的 -f 该怎么用阿?安装的时候没做/home分区,现把剩余硬盘空间建个分区,但disklabel的n参数说欲指定挂载点必先使用 -f ,man手册看了数遍真不懂⊙_⊙,不知道参数后面要跟什么文件,求帮助T_T
如果是系统已经安装好,只是想把一些未分配的空间利用起来,可以这样做:

注意:disklabel操作有风险,要将磁盘上的重要数据备份到另外的磁盘上

1. 使用disklabel在未分配的空间上创建分片(slice)
2. 在新建的分片上创建文件系统
3. 挂载新建的系统到临时挂载点
4. 将需要的数据复制到此临时挂载点
5. umount临时挂载点,将文件系统挂载到真正的挂载点
6. 更新/etc/fstab,使系统重启时自动挂载此新建的文件系统


关于1:
要找到未分配的空间,首先使用disklabel命令查看现有的磁盘空间划分情况:
在我前两周新买的mini机上(x86):

代码: 全选

[root@jasmine ~]# disklabel wd0
# /dev/rwd0c:
type: ESDI
disk: ESDI/IDE disk
label: KingSpec KSD-SA2
duid: 977a3ae7e27c5d09
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 255
sectors/cylinder: 16065
cylinders: 1925
total sectors: 30932992
boundstart: 64
boundend: 30925125
drivedata: 0

16 partitions:
#                size           offset  fstype [fsize bsize  cpg]
  a:          1028096               64  4.2BSD   2048 16384    1 # /
  b:          2104515          1028160    swap                   # none
  c:         30932992                0  unused
  d:         16787872          3132704  4.2BSD   2048 16384    1 # /var/www
  e:          6281408         19920576  4.2BSD   2048 16384    1 # /usr
  f:          4192992         26201984  4.2BSD   2048 16384    1 # /home
  g:           530144         30394976  4.2BSD   2048 16384    1 # /var
这里要注意每个分片的offset和size。比如上面的输出中,a分片offset值为64,它的大小是1028096,分片b的offset为1028160,而64+1028096=1028160,说明a分片的结尾紧邻着b分片的开始,两个分片之间没有未分配的空间。

使用这种方式找到未分配空间的位置,然后以此为依据来创建新的分片。如果这个位置没找准,导致新分片和在用的分片发生重叠,将可能导致数据丢失或系统故障,慎之!

找好以后,使用disklabel -E ${disk} (sd0,wd0等等)进入互动模式创建新分片
disklabel -E后就和安装系统时的磁盘分区界面一样,使用:

a k (新分片代码):添加一个新分片,然后按照提示输入offset的值和分片的大小
w:保存更改
q: 保存并推出

新分片创建好后,剩下的就好办了。如果有什么地方没说清楚,大家跟帖一起讨论 ...

头像
unreal
银 Ag
帖子: 1079
注册时间: 2010-06-07 18:52

回复: 一个挂载点重复挂载的问题

帖子 unreal » 2011-12-05 22:07

leo 写了:我还真没有这样试过,而且也不太明白unreal兄您的意思,是想全新安装5.0但还要保留原有 /home 分区还是只是想从4.9升级到5.0?抑或是想利用原来分区时保留的磁盘空间?
呃,我的表达能力很成问题阿:p
关于重复挂载的问题,先不谈了,到底是 先进先出 还是 后进先出,我有空再折腾看看。

我这次安装5.0,不是从4.9升级的;不算那个用来引导OB的ext2分区的话,算是全新安装。记得FAQ说在已经有OB分区的硬盘上安装,会自动保留/home,但以前每次都被安装程序格式化,这次就没信安装程序了;先略微调整其他分区的大小,比如/usr +2G,/var -2G,然后删了/home。装完之后,想要再加上/home,就不会用disklabel 指定了,刚才又看看man,也许是要-E -f /etc/fstab 。
勤能補拙 Just do it now!

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

回复: 一个挂载点重复挂载的问题

帖子 leo » 2011-12-05 22:57

抱歉,我的脑子里还是i386的习惯性思维,呵呵,不掺合loongson了,帮倒忙。:)

头像
unreal
银 Ag
帖子: 1079
注册时间: 2010-06-07 18:52

回复: 一个挂载点重复挂载的问题

帖子 unreal » 2011-12-06 0:17

acheng 写了:如果是系统已经安装好,只是想把一些未分配的空间利用起来,可以这样做...
我也是disklabel -E wd0 然后 a l ,这样剩余空间名为 wd0l ,然后指定挂载点/home 不能,保存更改退出,可以mount /dev/wd0l /mnt ,手工改fstab肯定也行的,虽然我没试。
另外有点奇的是:wd0l 里面是原先4.9的sys目录,里面是内核源码;而原home里的东西木有了。也许跟调整过其他分区的大小有关吧。
勤能補拙 Just do it now!

头像
unreal
银 Ag
帖子: 1079
注册时间: 2010-06-07 18:52

回复: 一个挂载点重复挂载的问题

帖子 unreal » 2011-12-06 0:26

leo 写了:抱歉,我的脑子里还是i386的习惯性思维,呵呵,不掺合loongson了,帮倒忙。:)
leo兄何出此言?帖子里有你身影你的关注,就使我等菜鸟感到莫大的欣慰:)
勤能補拙 Just do it now!

头像
acheng
锌 Zn
帖子: 581
注册时间: 2011-07-07 21:52

回复: 一个挂载点重复挂载的问题

帖子 acheng » 2011-12-06 10:28

如果wd0l还保存有原来的数据,那说明磁盘上已经有此分片的disklabel以及文件系统,应该可以直接mount,不需要再添加disklabel,否则应该会导致数据丢失吧

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

回复: 一个挂载点重复挂载的问题

帖子 leo » 2011-12-07 6:18

unreal 写了:leo兄何出此言?帖子里有你身影你的关注,就使我等菜鸟感到莫大的欣慰:)
让俺这张老脸没地方撂,实在不敢乱说了,等我的内存来了吧,我肯定要在虚拟机里试试。到时候再喷不迟。:D

头像
unreal
银 Ag
帖子: 1079
注册时间: 2010-06-07 18:52

回复: 一个挂载点重复挂载的问题

帖子 unreal » 2011-12-07 16:38

acheng 写了:如果wd0l还保存有原来的数据,那说明磁盘上已经有此分片的disklabel以及文件系统,应该可以直接mount,不需要再添加disklabel,否则应该会导致数据丢失吧
昨晚试了

代码: 全选

disklabel -E -f /etc/fstab wd0
可以用 n 命令指定挂载点,reboot 系统运行正常。我的情况是安装之时删除了原先的/home分区的磁盘标签(wd0l),此分区没有被newfs格式化,只是木有标签,数据应该是在的;待安装完成再给个标签和挂载点就行了。今晚回去再测试看看。

另外,在木有用 dislabel -f 指定 wd0l 挂载点之前,fstab 文件里每行都有该分片所在的磁盘duid,有 nodev 参数,其他记不得了。然后dislabel -f 之后,fstab 文件里就木有 duid了,参数也变了,但无 softupdate。请问这个怎么打开?还是要手工改fstab?
勤能補拙 Just do it now!

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

回复: 一个挂载点重复挂载的问题

帖子 leo » 2011-12-07 17:36

unreal 写了:昨晚试了

代码: 全选

disklabel -E -f /etc/fstab wd0
可以用 n 命令指定挂载点,reboot 系统运行正常。我的情况是安装之时删除了原先的/home分区的磁盘标签(wd0l),此分区没有被newfs格式化,只是木有标签,数据应该是在的;待安装完成再给个标签和挂载点就行了。今晚回去再测试看看。

另外,在木有用 dislabel -f 指定 wd0l 挂载点之前,fstab 文件里每行都有该分片所在的磁盘duid,有 nodev 参数,其他记不得了。然后dislabel -f 之后,fstab 文件里就木有 duid了,参数也变了,但无 softupdate。请问这个怎么打开?还是要手工改fstab?
请问unreal兄是如何删除的 wd0l 的磁盘标签的?是用disklabel的 d 命令删除的吗?如果是再加上 wq 命令写入,我感觉可能已经newfs了。
即便没有执行wq, 似乎也不能用 n 命令指定挂载点,我的印象是可能会直接newfs了此disklabel分区,不过,时间长了印象不深了,如果数据很重要,则建议找一个虚拟机先试验一下。
我一般不这样操作(删除此分区),而是保留此分区但不挂载,系统启动后直接在fstab里指定挂载点,因为我的这个分区是 /home, 我现在一般是将编译好的稳定版系统组件和下载的packages以及网站备份放在这个dislabel分区里以备不测时恢复系统用的。

头像
unreal
银 Ag
帖子: 1079
注册时间: 2010-06-07 18:52

回复: 一个挂载点重复挂载的问题

帖子 unreal » 2011-12-07 19:33

回 leo兄:是 d 命令,肯定是q 退出的,往后就是安装程序继续做一个步骤,不知是否在格式化,然后还会问是否初始化,这里我选否。具体记得不清晰,回去再看看,不行就每步拍照~
勤能補拙 Just do it now!

头像
acheng
锌 Zn
帖子: 581
注册时间: 2011-07-07 21:52

回复: 一个挂载点重复挂载的问题

帖子 acheng » 2011-12-07 20:47

如果磁盘标签在安装过程中删除了,安装程序就不会在它上面重建文件系统。
但是不知道重建标签后数据还能不能恢复,尤其是如果这个slice的起始和结束扇区相对以前有变化的话。

头像
unreal
银 Ag
帖子: 1079
注册时间: 2010-06-07 18:52

回复: 一个挂载点重复挂载的问题

帖子 unreal » 2011-12-08 13:25

acheng 写了:如果磁盘标签在安装过程中删除了,安装程序就不会在它上面重建文件系统。
但是不知道重建标签后数据还能不能恢复,尤其是如果这个slice的起始和结束扇区相对以前有变化的话。
起始扇区肯定是万万不能变化的。
今天凌晨重新测试,做完分区下载安装包这一步,但误设了telecom的dns服务器,导致我的unicom线路无法解析ftp服务器,一个头昏就reboot了…:( 等晚上回去再折腾吧。
我的龙芯笔记本貌似是海外版的,PMON不支持fat引导,必须把U盘格成 ext2。
勤能補拙 Just do it now!

头像
unreal
银 Ag
帖子: 1079
注册时间: 2010-06-07 18:52

回复: 一个挂载点重复挂载的问题

帖子 unreal » 2011-12-09 2:18

测试通过!之前4.9的/home里面的文件都在,用户主目录也正常登录。因此可以结论:只要不改变任何一个分区的起始扇区,重装时删除一个分区的磁盘标签,待到安装完成且系统启动后再给该分区加上原来的标签,则该分区数据将被保留。

另外:前面说到过调整了其他几个分区的大小,结果 wd0l 居然是/sys目录里的文件(内核源码)也即是wd0j。这次重装几乎是全新的,除了wd0l 没变,其他分区都是自动分配大小,却能找回数据实属意料之外。

另外之二:昨天无法登录ftp与dns设置无关,今天设联通dns也不能登录,换了三个镜像才找到可用的。奇怪的是浏览器能访问那两个无法ftp登录的镜像服务器。
勤能補拙 Just do it now!

头像
acheng
锌 Zn
帖子: 581
注册时间: 2011-07-07 21:52

回复: 一个挂载点重复挂载的问题

帖子 acheng » 2011-12-09 12:22

不错,我又见识了新的东西 :-)
据我了解,官方的PMON应该是只能从ext2分区启动的

回复

在线用户

正浏览此版面之用户: 没有注册用户 和 4 访客