月度归档:2011年11月

zeroshell从硬盘iso启动

【分析】

经检验zeroshell的1.0所有beta版本内核和initrd均未改变但zeroshell的kernel2.6.25.20没有编译ntfs选项,因此需要编译出ntfs.ko模块,同时修改initrd.gz中的linuxrc启动脚本(initrd中的linuxrc默认不接受内核参数)

【处理】

1.修改linuxrc

给linuxrc添加ISO选项,使用方法 ISO=/dev/hdb7:SYSTEM/zeroshell.isolinuxrc中自动插入ntfs.ko模块,探测ISO选项中所指定的设备以及其上的iso文件zeroshell的kernel识别SATA硬盘通常是hdx而非sdx

2.重新打包iso

zeroshell 1.0 beta16的iso解压出来有300M,而iso仅有180M左右,实际上iso的制造前首先用mkzftree进行了压缩(isolinux下的文件不要压缩,这些是启动器和内核等文件)

mkisofs -R -z -T -v -hide-rr-moved -no-bak -V CDROM -no-iso-translate -jcharset=utf8 -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ../../zeroshell.iso .

【grub4dos的引导菜单】

修改的initrd.gz下载地址
http://115.com/file/e6e5q53f#initrd.gz

linux下获取分区文件系统类型

昨天分完区,发现fdisk识别出的文件系统有问题,xfs的文件系统直接认成了NTFS,本来是个分区工具识别不准就算了,结果blkid识别出来的分区的文件系统类型也有问题(root用户下识别出的blkid和普通用户下识别出的blkid可能不一样,特别是刚分完区,这个时候以root权限运行的blkid显示的uuid,type之类的更准确),看来这两个工具还是存在不确定的因素,后来用parted查看正常,mount下自然正常(不正常就mount错误了)。
总结一下,对于已经mount之后的分区,用mount命令查看出的分区文件系统类型应该是准确无疑的,而对于没有mount的分区,blkid可以使用,但parted更好(至今linux下未发现比gparted更好的分区工具),给出几个shell函数

 

linux下文件系统卷标修改

今天测试文件系统,修改卷标,查了些东西,做个备忘

  •  Mtools 适用于 FAT32 格式分区.
  • ntfslabel(ntfsprogs) 适用于 NTFS 格式分区.
  • e2label(e2fsprogs)适用于 ext2 和 ext3 型格式分区.
  • xfs_admin(xfsprogs)适用于xfs型格式分区.

 

基本上都是”文件系统progs”的命名方式
yum list *fsprogs* 可以搜索出相关的文件系统工具集
rpm -qf ‘命令完整路径’ 反向查处命令所在的rpm包

EFI,BIOS,BOOT推荐几篇文章

主板不支持UEFI,移动硬盘GPT启动太无力了,好在看了几篇好文章,
推荐下

Managing EFI Boot Loaders for Linux
http://www.rodsbooks.com/efi-bootloaders/index.html

Booting from GPT
http://www.rodsbooks.com/gdisk/booting.html

A BIOS to UEFI Transformation
http://www.rodsbooks.com/bios2uefi/

 

 

 

 

 

 

 

 

 

 

 

 

 

 

geexbox2.0硬盘启动—-支持NTFS和ISO

【目的】

1.使geexbox 2.0支持NTFS分区格式
2.使geexbox 2.0能够直接从ISO格式的文件启动
3.方便使用持久化

【分析】

Geexbox 2.0使用的是2.6.38.8内核和busybox 1.19.2
通过rootfs的config文件我们可以查处内核的编译选项:
1.内核支持initrd的xz压缩
2.内核不支持ntfs,但开启了ntfs-3g的支持

对init启动脚本的修改:
1.initrd处理
依次使用xz 4.999beta,5.0.0,5.0.1,5.0.2,5.0.3,5.1.1alpha对修改后的initrd进行压缩,原内核都不能进行解压启动,因此initrd镜像暂时没有进行压缩,只是cpio的格式

2.增加ntfs-3g命令
initrd镜像中没有包含ntfs-3g程序,因此必须将rootfs中的ntfs-3g移植进去,从rootfs中拷贝这些库到initrd的/lib中(注意不是软链接,而是其直接指向的库文件)ld-linux.so.2 libdl.so.2 libgcc_s.so.1 librt.so.1 libc.so.6 libfuse.so.2 libpthread.so.0,拷贝ntfs-3g到/bin

3.关于数据保存
开启persistent,相当于使能数据持久化开启persistent与不开启persistent的主要区别(在不使用ro,rw等参数的情况下)
PERSISTENT_OPT=”-o loop -t ext2″挂载参数变成挂载件
ROOT_MODE_PART=rw 挂载选项不是只读挂载,而是读写挂载
默认情况下,开启persistent,持久化文件是/mnt/casper-rw

4.系统文件查找
a)指定ROOT之后,脚本会自动去挂载ROOT指定的设备,ROOTFS指定文件系统模式,官方发布的iso中他为rootfs文件,即非flat,指定为flat之后,脚本不会再去找rootfs,认定rootfs中的内容已经放入ROOT中,并非存在于一个squashfs文件中
b)未指定ROOT设备时,init脚本将扫描磁盘(scan the block devices for rootfs)

默认只探索光驱,单分区优盘,其他磁盘的第一个分区,修改探测时遍历所有设备,且识别ntfs分区。

5.添加选项from,支持从硬盘启动
该参数优先级最高,启用该参数后,不会使用ROOT设备来查找,也不会自动扫描硬盘

格式:</类型:设备:对应的文件或文件夹/>
类型可以是DIR:ISO,如果是其他直接退出
设备通常是dev下的硬盘,U盘或光盘

例子:
ISO:/dev/sda7:geexbox-i386-2.0.iso
DIR:/dev/sda6:GEEXBOX

DIR情况下
1)persistent默认是该目录下的casper-rw
2)ROOTFS不支持flat模式,ROOTFS默认是该目录下的rootfs

ISO情况下
1)persistent默认被禁用,即便设置也无效
2)ISO情况下ROOTFS肯定不是flat模式,因此不用考虑

另外由于需要持久化,必然会占据硬盘,持久化数据所在分区可能无法在geexbox的界面中显示,如果DIR下不使用持久化或者ISO情况下,不会出现某个硬盘分区不显示的状况

6.中文化
这一代不需要中文设置的原因是2.0的geexbox本身就相当于一个xmbc,而xmbc本身是支持中文,因此只需在xmbc界面下设置下即可

 

【使用方式】

1.启动菜单(grub4dos):

#直接从ISO启动,需要按照以下格式指名from参数

#从硬盘启动(目录),同样需要借助于from参数,这种方式下一般都使用persistent做持久化处理

 

2.重新打包iso

a)下载修改过的initrd文件
http://115.com/file/e6ef8j86#initrd.zip
b)替换原版geexbox-2.0-i386.iso的initrd,像7z等解压工具都可以,然后重新打包,mkisofs -J -R -T -v -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ../../geexbox-2.0-i386.iso .,这是linux下的参数,window下进行应该也可以

不足之处:
1)initrd没有压缩,体积稍大(有谁知道kernel-2.6.38.8对应的xz版本请告诉我,测试了4.999beta,5.0.0,5.0.1,5.0.2,5.0.3,5.1.1alpha都不行)
2)ISO启动方式没有提供数据持久化(主要是觉得没有必要)

 

uuid改变导致fedora16无法启动

为了打NFS16和上古5,果断将已经一塌糊涂的WIN7重装了下,按部就班的装上各种最新的驱动,windows组件。结果重启进不了fedora 16,终于知道囧是怎么一回事。控制台下查看了下日志,发现win7所在分区在启动过程中没有被正常挂载,grub2的恢复模式下也卡在了这个地方,问题症结应该就在这个地方了。重启进入cdlinux,查询uuid,果然win7所在分区uuid发生改变,而fstab中ntfs-config写入的挂载条目仍然是之前的,改之,重启。。。。依然进不了,再进cdlinux,注释掉所有ntfs-config写入的挂载条目。再重启,一口气进入gnome3桌面。重新启动ntfs-config配置好所有ntfs分区的开机挂载。

结论:
对于 使用了ntfs-config来配置ntfs分区开机挂载的同学,在ntfs分区的uuid发生改变时(通常是格式化,卷标修改不影响uuid),先注释掉linux系统原fstab中的ntfs挂载条目,重启进入桌面后再用ntfs-config重新配置。