把Arch Linux安装到U盘上的具体教程
Arch Linux简介
Arch Linux(或称Arch)是一种以轻量简洁为设计理念的Linux发行版。其开发团队秉承简洁、优雅、正确和代码最小化的设计宗旨。Arch Linux 项目受 CRUX 启发,由 Judd Vinet 于2002年启动。
Arch Linux是起源于加拿大的一份致力于使用简单、系统轻量、软件更新速度快的GNU/Linux发行版。创始人Judd Vinet出于对Debian以及Red Hat的包管理器不满,以及受CRUX影响而创立。最初针对i686,但是如今对x86_64也支持良好,而且还派生出了针对ARM平台的Arch Linux ARM以及针对HURD内核的Arch Hurd(发展缓慢)。
Arch Linux 将简洁定义为:避免任何不必要的添加、修改和复杂增加。它提供的软件都来自原始开发者((上游),仅进行和发行版(下游)相关的最小修改。
不包含上游不愿意接受的补丁。绝大部分 Arch 下游补丁都已经被上游接受,下一个正式版本里会包含。
配置文件也是来自上游,仅包含发行版必须的调整,比如特殊的文件系统路径变动。Arch 不会在安装一个软件包后就自动启动服务。
软件包通常都和一个上游项目直接对应。仅在极少数情况下才会拆分软件包。
Arch尽全力保持软件处于最新的稳定版本,只要不出现系统软件包破损,都尽量用最新版本。Arch采用滚动升级策略,安装之后可以持续升级,无需重装。只敲一个命令,Arch就可以保持最新。
Arch向GNU/Linux用户提供了许多新特性,包括systemd初始化系统、现代的文件系统(Ext2/3/4、Reiser、XFS、JFS、BTRFS)、LVM2/EVMS、软件磁盘阵列(软RAID)、udev支持、initcpio(附带mkinitcpio)以及最新的内核。
基本系统安装
本想使用 GPT 分区表,查了一些资料, 为了使这个U盘在 BIOS 和 UEFI 电脑上都能用, 需要创建一个 BIOS boot 分区,2M 大小足够,位置尽量靠前。 多系统的话还要创建一个 200M 的 EFI System Partition(ESP) 分区。 这些都不是问题,但实际做下来, GPT 中的 NTFS 分区在 Win7 下死活不认, 想用这个分区作为常规U盘使用就不行了, 只好再回到 MBR 分区表。 如果是移动硬盘用 GPT 应该没有问题。
所以仍然使用 MBR 分区,所以就要用 fdisk 或者 cfdisk 了, 不能使用支持 GPT 的 gdisk 和 cgdisk, 4k 对齐也是自动完成。 有趣的是,如果想把 GPT 分区表转换成 MBR 分区表, 还得借助 gdisk:r 进入 Recovery 模式, g 进入 MBR 模式,w 进行转换。 根据实际情况, 有些分区转换未必能够成功, 不过变回 MBR 分区表是没有问题的。
NTFS 分区得在第一个分区,不然 Windows 不认。
启动U盘是 /dev/sdb,目标U盘就成了 /dev/sdc。
# fdisk /dev/sdb
Disk /dev/sdc: 8022 MB, 8022982656 bytes, 15669888 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdb1 2048 1804287 901120 7 HPFS/NTFS/exFAT
/dev/sdb2 * 1804288 2009087 102400 83 Linux
/dev/sdb3 2009088 10405887 4198400 83 Linux
/dev/sdb4 10405888 15669887 2632000 83 Linux
第一个分区先用 ntfs,当正常U盘使用, 如果以后需要用到 ESP 分区,直接用这个分区转,或者切一部分空间过去。 第二个分区 100M,挂 /boot; 第三个分区 4G,作为 ArchLinux 根分区; 第四个分区 2.5G,作为 $HOME ;
格式化分区:
如果使用 xfs 分区格式:
# mkfs.ntfs -f /dev/sdc1 -L f004-c
# mkfs.xfs -n size=64k -l lazy-count=1 /dev/sdc2 -L f004-boot
# mkfs.xfs -n size=64k -l size=128m,lazy-count=1 /dev/sdc3 -L f004-a
# mkfs.xfs -n size=64k -l size=128m,lazy-count=1 /dev/sdc4 -L f004-b
-n size=64k 参数增加了文件名(目录)区域大小(默认 4k), 这样可以减少 IO 消耗,代价是 CPU 消耗多一些, 这对现代计算机显然不是问题。 -l size=128m 参数扩大日志的容量(默认 10m),更安全, 代价是挂载时间会长一些。 -l lazy-count=1 参数减少 superblock 读写次数,提高性能。
如果使用 ext4 分区格式:
# mkfs.ntfs -f /dev/sdc1 -L f004-c
# mkfs.ext4 -b 4096 -m 0 -i 16384 -O '^has_journal' /dev/sdc2 -L f004-boot
# mkfs.ext4 -b 4096 -m 1 -i 16384 -O '^has_journal' /dev/sdc3 -L f004-a
# mkfs.ext4 -b 4096 -m 0 -i 16384 -O '^has_journal' /dev/sdc4 -L f004-b
-b 4096 是每个存储块的大小。 -m 1 是指定 root 保留空间为 1%,home 区就不留了。 -i 16384 是指定多少字节的数据设置一个 inode 节点, 增加它的值会减少 inode 的总数,占用的空间会少一些, 相应的能够存储的文件数量也减少了,这个稍微注意一下就好,一般都够用。 -O '^has_journal' 是关掉文件系统日志,有点小危险。
经过两天的折腾,个人感觉 ext4 在U盘上读写速度快一些。
挂载分区:
# mount /dev/sdc3 /mnt
# mkdir /mnt/boot
# mount /dev/sdc2 /mnt/boot
# mkdir /mnt/home
# mount /dev/sdc4 /mnt/home
df -h 检查一下:
# xfs
Filesystem Size Used Avail Use% Mounted on
/dev/sdc3 3.9G 33M 3.9G 1% /mnt
/dev/sdc2 82M 5.2M 77M 7% /mnt
/dev/sdc4 2.4G 33M 2.4G 2% /mnt/home
# ext4
Filesystem Size Used Avail Use% Mounted on
/dev/sdc3 3.9G 8.1M 3.8G 1% /mnt
/dev/sdc2 96M 48K 96M 1% /mnt
/dev/sdc4 2.5G 3.8M 2.4G 1% /mnt/home
ext4 改变 bytes-per-inode 确实对分区所占空间影响很大。
安装基本系统
家里有无线路由,网络不用配置,已经自动连上了。
编辑 /etc/pacman.d/mirrorlist ,把最快的源挪到最上面。 一般来说 163 和台湾的源比较快,163 似乎有时候不稳定, 几个中国大学的源有些是 ipv6 的,用不了。 安装完成后,这个配置文件也会自动拷贝到新系统中。 自带的 vi 真的是比 vim 难用多了,一会儿第一时间换掉。
按照官网说明,用 # pacstrap /mnt base base-devel 安装基本系统, base-devel 也一并装上,迟早会用到 AUR 或 ABS。 提示共 128 个软件包,需要下载 158.37M 内容,安装完成后是 507.09M。
安装
grub: # arch-chroot /mnt pacman -S grub
。
生成
fstab: # genfstab -p -U /mnt >> /mnt/etc/fstab
, 然后更改 fstab (系统默认一般就比较好了,不优化也行):
使用 relatime 挂载参数。
以前是推荐增加 noatime 挂载参数,不记录文件读取时间, 但这会导致 Mutt 等需要文件读取时间的软件出错。 现在改为使用 relatime 参数了 (已经默认加上了,Linux 2.6.30 起此参数成为默认值), 只有在文件读取时间早于文件更新时间时,才更新读取时间数据。
使用 nodiratime 挂载参数,不记录目录读取访问时间。
把 /tmp 放到 tmpfs 上去。(没单独分区,免了)
不再使用 discard 挂载参数。
这个参数主要是针对 SSD 硬盘的,对不支持 TRIM 的机械硬盘无效, 对U盘貌似作用不明显。
不再使用 async 挂载参数,开启异步读写模式。 由于只是“看起来”快了,实际数据写入速度并没有改善, 考虑到稳定性,是否应使用此参数?
不要使用 barrier=0 挂载参数,这个选项似乎在突然断电、 拔U盘时,有几率丢失文件或损坏分区。 (基于我的经历 + 参考 )
由于不会跑什么大应用,为了降低 swap 的使用频率, 修改 /mnt/etc/sysctl.conf :
vm.swappiness = 1
vm.vfs_cache_pressure = 50
前一句是尽量不使用 swap,后一句是缓存文件系统信息。
下面的操作可以在 chroot 环境下运行:
# arch-chroot /mnt
设置 hostname: echo 'f004' > /etc/hostname 。
设置时区:
# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
新建 /etc/locale.conf 内容为:
LANG='en_US.UTF-8'
LC_COLLATE='C'
LC_MESSAGES='C'
编辑 /etc/locale.gen ,取消 en_US.UTF-8, zh_CN.UTF-8, zh_TW.UTF-8 前面的注释,然后执行 locale-gen 命令。
更改 root 密码: passwd root 。
安装 Grub 引导系统。
仍然在 chroot 环境中操作。 编辑 /etc/mkinitcpio.conf ,检查 HOOKS 段, 让 block 参数紧挨着 udev 参数之后(早一点加载), 然后 # mkinitcpio -p linux 生成 img 文件。 同时加上了 shutdown 参数,作用以后再试。 resume 参数就算了,U盘本来就小、慢,支持休眠更痛苦。 (注:新版本中 block 参数替代了 usb pata sata scsi 等一众参数)
安装 grub:
# grub-install --target=i386-pc --recheck --boot-directory=/boot --no-floppy /dev/sdc
# cp -v /usr/share/grub/{unicode.pf2,ascii.pf2} /boot/grub/
# cp -v /usr/share/locale/en\@quot/LC_MESSAGES/grub.mo /boot/grub/locale/en.mo
无论是 32 位还是 64 位系统,都是使用 --target=i386-pc 参数, --no-floppy 是不检查软驱(这玩意儿现在应该没人用了)。 后两句不执行也行,还没弄懂是做什么的。
然后,千万不要忘记 生成 grub.cfg 文件 :
# grub-mkconfig -o /boot/grub/grub.cfg
# grep 'set=root' /boot/grub/grub.cfg
# blkid /dev/sdc2
现在的 Grub2 使用 UUID 来找硬盘分区, 后两句就是检查新生成的 grub.cfg 使用的分区 UUID 和硬盘是否相符。 如果忘记生成 grub.cfg 了,可以再次用光盘启动进去做。
最后,退出 chroot 环境,umount,重启。 启动U盘可以收起来了。
启动后,新安装的U盘变成了 /dev/sdb, 此时最好将 mkinitcpio grub-install grub-mkconfig 重新做一遍, 否则有可能在下次或另外一台机器上启动时,损坏分区表,丢失文件。 或许没有道理,但这是我重复安装好多次以后的感觉,可能有以下原因:
带电插拔,可我都是 umount 了啊,不应当这么脆弱。
被 USB 3.0 高电流给破坏了,没拔U盘烧了算我走运? 倒是听说过 USB 3.0 损坏U盘数据。
/boot 原先没有单独分区,这个不应该。
是原先使用 GPT 分区在 BIOS 电脑上水土不服? U盘难道就不能用 GPT 分区么?
反正换回 MBR 分区后,貌似比较正常了。
把Arch Linux安装到U盘上的具体教程的更多相关文章
- 将Linux(ubuntu)安装到U盘上,实现即插即用
		
说明: 本教程是说明如何将ubuntu系统安装到U盘上(也就是把U盘当做电脑的硬盘),可以实现U盘插到任何电脑上都能够在实体机上运行ubuntu系统,而且所有的运行配置都能被保存,相当于随身携带的一个 ...
 - Arch Linux 安装简明流程
		
Arch Linux 安装简明流程 这是一篇为 GPT/EFI 引导 的电脑安装 Arch Linux(双系统)的中文简明流程,尽可能省略了可以省略的流程与文字以使得篇幅尽量短小,基本上基于 Arch ...
 - Win7下安装双系统Centos,并修复Centos引导加载程序安装在U盘上的问题
		
1.使用U盘安装Centos时,磁盘分区划分要注意:系统(包含Win7)只能4个主分区,所以只能在删除一个主分区或者在扩展分区的空闲分区内建立目录. 2.Centos在安装步骤的最后,引导加载程序的选 ...
 - Arch Linux 安装记录
		
Arch Linux 安装记录 基本上参考wiki上的新手指南,使用arch 2014.6.1 iso安装 设置网络 有线网络 Arch Linux 默认开启DHCP. 静态ip 首先关闭DHCP:s ...
 - Arch LInux安装dde(Deepin Desktop Environment 深度桌面环境)
		
我一直比较推荐一些Linux新手使用Deepin Linux,因为我认为这种尽量的follow Windows的系统至少对于新手来说是比较的友好的,而且预装了QQ 火狐浏览器中文版,甚至还移植了像36 ...
 - Arch Linux 安装rust
		
Arch Linux 安装rust 0. 参考 Rust Toolchain 反向代理使用帮助 1. 安装 安装rustup和toolchain yaourt -S rustup rustup ins ...
 - Arch Linux 安装记(安装到移动硬盘)
		
一转眼传说中装起来难于上青天,用起来险如上刀梯(容易滚挂),绰号“洗发水”并被戏称为“邪教”的 Arch Linux 已经用了几个月.某些关于其安装难度和稳定性的传说实在太夸张了,反而觉得这才是适合懒 ...
 - Arch Linux 安装、配置、美化和优化
		
国庆假期玩了下Arch Linux,发现这货跟Ubuntu之流相差甚远,甚难调教,而且安裝过程全命令行,会有各种问题,各种知识... --- 安装引导器--- -------------------- ...
 - Arch linux安装
		
安装archlinux可参考: http://blog.sina.com.cn/s/blog_69e5d8400101bqlj.html http://www.cnblogs.com/mad/p/32 ...
 
随机推荐
- Docker mysql 连接 “The server requested authentication method unknown to the clien”错误
			
查了下,出现这个错误的原因是从mysql 5.6开始,mysql密码加密算法更改了. 我装的mysql 8.* ,那么有两种解决方法: mysql 版本选择 <= 5.6 修改密码 docker ...
 - windows下caffe如何单独编译proto文件
			
利用protoc.exe即可编译. 在protoc.exe当前文件夹下打开cmd,输入命令如下: pushd %~dp0 echo "copying .proto and generated ...
 - 查询excel中共多少个工作表,绝对好使
			
用宏表函数:具体做法如下: CTLT+F3,定义一个名称,名字随便起,比如AA,公式=GET.WORKBOOK(4),确认. 然后随便一个单元格输入=AA就可以了显示有几个工作表了.
 - 【BZOJ3798】特殊的质数 分块打表
			
[BZOJ3798]特殊的质数 Description 求[A,B]之间的质数个数,并且满足X=Q^2+P^2,P,Q是正整数. Input 第一行输入A,B Output 输出有多少组P,Q满足条件 ...
 - 转载别人的DLL DEll研究
			
昨日,编了个DLL和EXE来进行了下测试,exe通过lib静态联编dll,来调用它的导出类,当改变DLL中导出类的结构(eg.成员变量的顺序等),从新发布DLL而不从新联结编译EXE,就会造成错误的执 ...
 - 四、H5 录制视频 Web Real-Time Communication
			
Web Real-Time Communication HTML5实现视频直播功能思路详解_html5教程技巧_脚本之家 https://m.jb51.net/html5/587215.html
 - IO流入门-第十三章-File相关
			
/* java.io.File 1.File和流无关,不能通过该类完成文件的读写 2.File是文件和目录路径名的抽象变现形式. */ import java.io.*; public class F ...
 - JavaScript dotAll模式
			
JavaScript正则表达式中点(.)是一个特殊字符,它可以匹配除了一下条件的任意字符. 四个字节的UTF-16字符 换行符(\n) 回车符(\r) 行分隔符 段分隔符 为了使点(.)可以匹配任意字 ...
 - Django的模型层(2)- 多表操作(上)
			
一.创建模型 例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情模型和作者模型之间是一对一(on ...
 - hibernate detached分离查询 与 抓取策略注意事项
			
1.detached在抓取策略为 jion显式左外连接查询情况下 会产生笛卡儿积现象 DetachedCriteria dc = DetachedCriteria.forClass(Topic.cla ...