在windows ntfs 分区安装 archlinux |
发布: 2014-04-20 14:11 |
在windows ntfs 分区安装 archlinux 现有电脑,不想重新分区,希望能像ubuntu的wubi那样,直接在windows上安装启动linux系统。 至于为什么不直接使用ubuntu呢,主要是ubuntu使用的少,经常使用的系统是arch linux。 当然,在安装这个之前,使用的是wubi安装的ubuntu系统。 如果使用arch linux的安装介质,安装过程会更简单些。 使用全在安装的过程中,也参考了wubi的启动过程。 这种安装方式,需要当前有linux系统。安装完成后,这个arch linux系统是可以在不同机器上迁移的。 不需要在每台机器上都安装一遍。 分区信息: /dev/sda2 ntfs C: /dev/sda3 ntfs D: /dev/sda4 ntfs E: 用wubi安装的ubuntu放在/dev/sda2分区,目录结构为,C:/ubuntu/disk/root.disk arch linux准备安装在E:/ntfspage.img。 进入ubuntu系统,挂载/dev/sda4到/mnt/sda4。 创建一个30G的磁盘文件,/mnt/sda4/ntfspage.img: dd if=/dev/zero of=/mnt/sda4/ntfspage.img ibs=10M count=300 mkfs.ext4 /mnt/sda4/ntfspage.img mount /mnt/sda4/ntfspage.img /mnt/archusb 在这个虚拟硬盘上安装arch linux,使用pacstrap工具,在些不详细说明。 安装完成后,现在需要重做initramfs.img,使其在启动过程能正确加载root分区并启动。 修改/lib/initcpio/init文件, 把"$mount_handler" /new_root一行扩展为, [code type="bash"] mkdir /ntfs_root "$mount_handler" /ntfs_root # mkdir /new_root # 在其他的mkinitcpio的hooks中创建了,这里不需要再创建 mount -t ext4 /ntfs_root/ntfspage.img /new_root mount --bind /ntfs_root /new_root/ahost mount --bind /ntfs_root /new_root/mnt/sda4 [/code] 然后pacman -S linux重做initramfs.img启动文件。 两行mount --bind是把已经mount上的windows分区整个再挂载到linux系统上, 在linux系统上依旧能访问其分区上的其他数据。 接下来修改wubi ubuntu的grub.cfg文件,添加一菜单项, enuentry 'archusb' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-7b816857-1930-402b-b897-23b657e91566' { gfxmode $linux_gfx_mode insmod gzio insmod ntfs set root='hd0,msdos4' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos4 --hint-efi=hd0,msdos4 --hint-baremetal=ahci0,msdos4 189C084C9C0826BA else search --no-floppy --fs-uuid --set=root 189C084C9C0826BA fi loopback loop1 /ntfspage.img set root=(loop1) linux /boot/vmlinuz-linux root=UUID=189C084C9C0826BA rootimg=/ntfspage.img rootfstype=ext4 logfile=/initramfs.log rw initrd /boot/initramfs-linux.img } 修改/etc/mkinitcpio.conf,添加一个hook MODULES="loop fuse" BINARIES="/usr/bin/ntfs-3g /usr/bin/mount.ntfs" HOOKS="...... rootntfsimg ..." 接下来重启动机器,进入新的菜单项,就进入了新的系统。 现在的这个设置目录还有几处理报错,但不会影响系统的正常使用。 问题在于现在使用的写死的路径,还需要细化,能否把这些路径信息以参数的形式传递进来。 另一个不足之处是现在还依赖wubi的grub.cfg启动,或者也许换用grub4dos后应该正常使用。 之后优化完成再来补充,目前已经得到了一个从ntfs正常启动的全新系统了。 这个磁盘镜像文件还可以拷贝到其他机器,加个启动菜单即可正常启动系统。 用到的一些命令, pacstrap pacman dd mkfs.ext4 mount.ntfs ntfs-3g 更新: 还有一种更清晰的方式,使用hook机制,插入代码, 涉及3个文件,不需要修改现有的文件,系统更新不受影响, 添加/lib/initcpio/hooks/rootntfsimg文件,内容为: [code type="bash"] #!/usr/bin/ash # need kernel command line param # rootimg /path/to/rootdisk.img # root the ntfs partition dev, like /dev/sda4 # logfile the initramfs run log, like /var/log/initramfs.log # rootfstype disk img's file system type, such as ext3/ext4/btrfs/reiserfs/reiser4 # slowdown=5 run_latehook() { umount /new_root mkdir /ntfs_root "$mount_handler" /ntfs_root rootdevname=$(echo $root | sed s/dev/mnt/g) fsck.ext4 -n /ntfs_root/ntfspage.img > /fsck.log 2>&1 mount -t ext4 /ntfs_root/ntfspage.img /new_root mount --bind /ntfs_root /new_root/ahost mount --bind /ntfs_root /new_root/mnt/sda4 } [/code] 添加/lib/initcpio/install/rootntfsimg文件,内容为, [code type="bash"] #!/bin/bash build() { echo "install rootntfsimg..." add_module loop add_module fuse add_module ntfs add_binary /usr/bin/tee add_binary /usr/bin/date add_binary /usr/bin/gcc add_binary /usr/bin/clang add_file /usr/include/stdlib.h add_file /usr/include/stdio.h echo "install run script" SCRIPT="rootntfsimg" add_runscript $SCRIPT } help() { cat < < HELPEOF for run linux installed on ntfs partitions somedisk.img. HELPEOF } [/code] 修改/etc/mkinitcpio.conf,添加一个hook MODULES="loop fuse" BINARIES="/usr/bin/ntfs-3g /usr/bin/mount.ntfs" HOOKS="...... rootntfsimg ..." 添加的hooks文件都是shell脚本,里面还可以插入调试信息,甚至记录日志到文件。 2014-04-20 补充: btrfs的优点是非常容易的动态调整分区的大小。 在这种使用方式下,即使使用的是文件磁盘镜像,仍旧能非常好的支持整个分区的大小。 需要把btrfs的挂载点unmount。 首先,使用qemu-img 调整磁盘镜像的大小 qemu-img resize +10G rawbtrfs2.img 然后,使用btrfs命令调整分区大小,在此,使用了一个扩展到最大的方式, btrfs filesystem resize 4:max /mnt/merge 4:max指的是devid为4的device扩展空间到最大,因为rawbtrfs2.img挂载在devid:4的位置。 再mount之后,可以看到整个btrfs空间已经变大了。 |
原文: http://qtchina.tk/?q=node/747 |
Powered by zexport
|