12年出了14.0版的slackware linux。现在本子64bit。于是官网下载了14.0 64bit版的iso镜像。

老本子32bit的,用了多年,光驱读取不能,也没有替换过。现在刻录光盘,保存时间据说有限。之前就一直使用闪存、移动硬盘做外部启动,无内置硬盘参与的启动。

之前安装在移动硬盘扩展分区的32bit 13.37版,许久不用,在现在本子上启动,kernel报错,空指针引用错误。是于今日开始了新版安装,镜像存了几个月了。

win7上,通过bcdedit,依然可以引导grub4dos,之后可以引导包括32bit win pe,linux磁盘img镜像在内的各种系统。

iso发行文件,7zip提取/usb-and-pxe-installers/usbboot.img,用来从grub引导安装。

内置硬盘,win7 bootloader加载grub4dos,grub4dos引导slackware内附带usb-and-pxe-installers目录下usbboot.img,用途顾名思义,usb和pxe启动用的。但是作为整体磁盘img镜像,于grub4dos可以映射到fd0当软盘启动。(作为软盘启动的存储设备容量不能超过1GB的限制好像是有的)

按照光盘根目录的安装文档解释,可替代的安装方式,有光盘、nfs、usb、harddrive等等。

刻录光盘比较慢,而且系统总是在更新的,光盘包不准什么时候会出现读取不能。刻u盘,印象比较慢,而且比较“破坏性”。

挂载外置1TB希捷硬盘,从grub4dos引导usbboot.img启动,按两次回车(选择加载核心和键盘布局),进入shell,可以识别和访问外置硬盘。mount挂载指定ntfs-3g分区格式(现在自动使用这个),访问ntfs分区。

之前的移动硬盘扩展分区,用PartedMagic从九百来G里调整出了60来G的扩展分区。之后主分区容量太大,无法从grub4dos读取内容。grub2没有试过来的。

之前的slackware,从12版开始安装,后来是13.37。按照网络某流行帖子,把/var,/usr,/tmp,/home,/boot指定在不同分区,加上/,swap,比较繁琐。

之前有一老外写的帖子,他的台式机,内置一块一样的冗余硬盘。初装好系统之后,克隆到另一块硬盘上。他主题讲的linux不需要碎片整理,他复制文件,和利用linux分区格式特性,碎片即文件非连续存储,不会影响系统性能。

安装新版的时候,先按照移动硬盘每个分区下文件的内容对照,猜测出对应挂载目录;之后找着/etc/fstab,cat列出来,水笔抄写在了手上。

这里重申一下用到的命令。

mkinitrd

在/boot目录下制造initrd文件用于从任意存储设备引导本分区。initrd理解为初始化内存磁盘(镜像)文件,基础的“/”目录内容。vmlinuz,差不多是linux kernel吧。

参数这里使用的

-c -m ext4 -k 3.6.xxxx -f ext4 -r /dev/sdb7 -w 16

-c清除之前建立的initrd树;

-m额外加载的分区格式模块,访问特定分区格式,当kernel没有包括能理解所用分区格式的模块的时候使用。

多个分区格式使用冒号“:”分隔。如 -m ext4:ext3:hdfs

-k指定启动使用的内核版本号。usbboot.img镜像的版本号和14.0发行版版本号并不一致。但是没有关系。mkinitrd在系统下找不到需要版本的目录会给出提示,退出。自己到那目录上一级找一下就找到了。

-f指定“/”,root所在分区的文件系统格式,必须和-r一起使用。

-r指定“/”所在分区。其实移动硬盘,更多被建议使用那种唯一识别id表示设备,取代/dev/sdb7,主要是设备号码不固定,可能识别sdc,sdd等。这里没有额外的存储设备,简单实用。

-w是initrd内存镜像盘启动是等待移动硬盘被激活的等待时间。我的外置硬盘,当长时间没有读写,自动休眠。这时候异步读写导致超时失败。开机后在引导前它会休眠,。同样在操作系统睡眠后它也会休眠,linux恢复后直接死机,没继续探究解决方式。

参数-w 16,即等待16秒钟,使移动硬盘从休眠到运转。

chroot .

改变“/”,挂载到当前目录。重定位系统的根位置。可以挂不同的磁盘、linux系统,方便系统修复。执行exit,恢复到之前默认状态。

xwmconfig

字符图形界面,选择使用的GUI。有的GUI可能出现配置错误,无法启动,或启动后莫名错误,而失效。个人使用xfce。GSB的gnome也可以。

安装过程:在usbboot启动后进入shell,在“/”下建立一个目录,挂载E盘,建立第二个目录,挂载E盘下的iso光盘镜像 (可替代的方式解压iso到E盘根目录下的目录里)。注意:安装程序说有两个目录不可以用于挂载内容。在mnt下挂载的任何内容,会被安装程序自动卸载。

执行setup。

出现图形界面。从前到后执行必要的选项。大概的步骤。0

第一步设定swap分区。我的是/dev/sdb5

之后设定“/”分区。以及想作为挂载点的目录和对应分区。安装程序建议的,/home和/usr/local,挂载在其他分区。分别类似于windows的“我的文档”目录和自己安装软件的目录。中间要求格式化,或者检察磁盘坏位置,或者不格式化。

设定安装程序来源,直接指向“/”下刚才挂载iso的目录的/slackware64安装程序包目录。

选择需要安装的程序包的大类。我全选了,除了kdei,kde界面的国际化语言支持。以前这样可以安装快一些。但是现在本子是快的可以,主要解压pkg、复制…

有一步,要求选择细分的程序包。我用的推荐的full,全部。值得注意的是有一个“newbie”选项,据说就是full,不晓得同胞对牝,Tao怎么看。

字符集,我选择的gb18030大字符集,兼容windows,但中文还是没有显示。

要求安lilo bootloader的时候,不要选择第三项MBR。不然newbie会有大问题。选择第一项写入root,“/”所在分区的“超级块”,从分区引导(grub4dos和win7bcd应该支持)。第二个选项从闪存写入启动器也不好。我根本没有使用过linux自带引导,从来是从windows引导至grub4dos,再来到linux。

等等等。

安装过程挺快。屏幕依次提示出不同软件包的安装细节。最后说可以选择Cancel然后reboot了。

离开安装程序之后不要重新启动。我是进入/mnt下安装程序挂载的root分区,执行

chroot .

改变root分区挂载点在当前目录。

这时shell不再是彩色的了。

重新挂载……所有的linux挂载点,/usr/local,/home,/var,/boot,etc.

之后进入/boot,默认初始启动文件所在。执行最初提到的mkinitrd制作initial ramdisk,initrd.gz。执行

ls -ltr

最后应该是initrd.gz。连同vmlinuz一起,通过任何途径最终复制到windows的ntfs分区下面。

那个我是从porteus启动复制ext4下的这两文件到ntfs下的。因为发现usbboot.img不能向ntfs写入内容。嗯保障了win7的数据安全。

对于从win7的bcdloader启动的grub4dos,配置menu.lst文件,指定vmlinuz和initrd.gz为linux核心文件,启动。我的配置

title Slackware on portable
kernel (hd0,3)/slackboot/vmlinuz root=/dev/sdb7 ro rootdelay=13 locale=zh_CN vga=791
initrd (hd0,3)/slackboot/initrd.gz
boot

第二行的参数依次指定了root分区,标志只读,读取延时(当初为了延迟读取移动硬盘,好像无所谓),语言(这个也没有效果),以及最后,显示器分辨率和色彩配置。

这里slackboot是保存启动文件的目录。分区是ntfs的。引导指向的是移动硬盘。

porteus是延续了slax的live Linux distro,是slackware的分支。不需安装的Linux发行版。能够以装载ntfs分区下镜像,附带加载模块文件的方式,启动。也可以放在闪存里,通过grub4dos启动。唔grub4dos不支持微软的ex胖文件系统,对于windows数据相容的闪存必须是ntfs或fat32格式…fat16没使过。porteus可以支持中文显示(配置模块),可以读写ntfs,作为linux可以访问linux分区。

额外的有软件工具可以在Windows下读写linux分区的文件。这现在没有怎么关注。