北京SEO

详解在在U盘上安装 ArchLinux 教程

2019/10/10/17:46:12  阅读:2171  来源:谷歌SEO算法  标签: 谷歌CEO

上教程我们讲了如何在移动硬盘上安装ArchLinux,本教程我们再来讨论一下如何在U盘上安装 ArchLinux,这样我们对移动存储安装 ArchLinux 就有了巩固.

本篇文章基于上次移动硬盘上安装 ArchLinux 的经历修改补充而来,不过半年的时间,一些基础组件就已经发生了变化,Arch Linux 可真是够“折腾”的.

PS:基于半年的 Arch Linux 使用经验,我 合租的 Linode VPS 也用上了 Arch,目前感觉尚好,Nginx + PHP-FPM 确实是不错的组合,Linode 使用修改过的 Linux 内核,AUR 上也有人发布自己制作的更新版,还没研究怎么升级.

基本系统安装

和上次移动硬盘安装一样,选择 32 位系统,安装介质使用 archlinux-2013.07.01-dual.iso dd 到另一个U盘,使用U盘启动,自动以 root 身份进入系统,插入移动硬盘,分区,格式化,挂载.

本想使用 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.

  1. #fdisk/dev/sdb
  2. Disk/dev/sdc:8022MB,8022982656bytes,15669888sectors
  3. Units=sectorsof1*512=512bytes
  4. Sectorsize(logical/physical):512bytes/512bytes
  5. I/Osize(minimum/optimal):512bytes/512bytes
  6. Disklabeltype:dos
  7. Diskidentifier:0x00000000
  8. DeviceBootStartEndBlocksIdSystem
  9. /dev/sdb1204818042879011207HPFS/NTFS/exFAT--phpfensi.com
  10. /dev/sdb2*1804288200908710240083Linux
  11. /dev/sdb3200908810405887419840083Linux
  12. /dev/sdb41040588815669887263200083Linux

第一个分区先用 ntfs,当正常U盘使用,如果以后需要用到 ESP 分区,直接用这个分区转,或者切一部分空间过去,第二个分区 100M,挂 /boot,第三个分区 4G,作为 ArchLinux 根分区,第四个分区 2.5G,作为 $HOME.

格式化分区:如果使用 xfs 分区格式:

  1. #mkfs.ntfs-f/dev/sdc1-Lf004-c
  2. #mkfs.xfs-nsize=64k-llazy-count=1/dev/sdc2-Lf004-boot
  3. #mkfs.xfs-nsize=64k-lsize=128m,lazy-count=1/dev/sdc3-Lf004-a
  4. #mkfs.xfs-nsize=64k-lsize=128m,lazy-count=1/dev/sdc4-Lf004-b

-n size=64k 参数增加了文件名(目录)区域大小(默认 4k),这样可以减少 IO 消耗,代价是 CPU 消耗多一些,这对现代计算机显然不是问题,-l size=128m 参数扩大日志的容量(默认 10m),更安全,代价是挂载时间会长一些, -l lazy-count=1 参数减少 superblock 读写次数,提高性能.

如果使用 ext4 分区格式:

  1. #mkfs.ntfs-f/dev/sdc1-Lf004-c
  2. #mkfs.ext4-b4096-m0-i16384-O'^has_journal'/dev/sdc2-Lf004-boot
  3. #mkfs.ext4-b4096-m1-i16384-O'^has_journal'/dev/sdc3-Lf004-a
  4. #mkfs.ext4-b4096-m0-i16384-O'^has_journal'/dev/sdc4-Lf004-b

-b 4096 是每个存储块的大小,-m 1 是指定 root 保留空间为 1%,home 区就不留了,-i 16384 是指定多少字节的数据设置一个 inode 节点,增加它的值会减少 inode 的总数,占用的空间会少一些,相应的能够存储的文件数量也减少了,这个稍微注意一下就好,一般都够用,-O '^has_journal' 是关掉文件系统日志,有点小危险.

经过两天的折腾,个人感觉 ext4 在U盘上读写速度快一些.

挂载分区:

  1. #mount/dev/sdc3/mnt
  2. #mkdir/mnt/boot
  3. #mount/dev/sdc2/mnt/boot
  4. #mkdir/mnt/home
  5. #mount/dev/sdc4/mnt/home

df -h 检查一下:

  1. #xfs
  2. FilesystemSizeUsedAvailUse%Mountedon
  3. /dev/sdc33.9G33M3.9G1%/mnt
  4. /dev/sdc282M5.2M77M7%/mnt
  5. /dev/sdc42.4G33M2.4G2%/mnt/home
  6. #ext4
  7. FilesystemSizeUsedAvailUse%Mountedon
  8. /dev/sdc33.9G8.1M3.8G1%/mnt
  9. /dev/sdc296M48K96M1%/mnt
  10. /dev/sdc42.5G3.8M2.4G1%/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:

  1. vm.swappiness=1
  2. 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 内容为:

  1. LANG='en_US.UTF-8'
  2. LC_COLLATE='C'
  3. 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:

  1. #grub-install--target=i386-pc--recheck--boot-directory=/boot--no-floppy/dev/sdc
  2. #cp-v/usr/share/grub/{unicode.pf2,ascii.pf2}/boot/grub/
  3. #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 文件:

  1. #grub-mkconfig-o/boot/grub/grub.cfg
  2. #grep'set=root'/boot/grub/grub.cfg
  3. #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 分区后,貌似比较正常了.

初始设置:如果一切正常,现在可以用 root 登录系统了:

  1. #uname-a
  2. Linuxf0043.9.9-1-ARCH#1SMPPREEMPTWedJul322:52:05CET2013i686GNU/Linux
  3. #free-h
  4. totalusedfreesharedbufferscached
  5. Mem:1.0G54M951M0B5.6M27M
  6. -/+buffers/cache:21M984M
  7. Swap:0B0B0B
  8. #df-h
  9. FilesystemSizeUsedAvailUse%Mountedon
  10. /dev/sdb33.9G764M3.1G20%/
  11. dev499M0499M0%/dev
  12. run503M7.1M496M2%/run
  13. tmpfs503M0503M0%/dev/shm
  14. tmpfs503M0503M0%/sys/fs/cgroup
  15. tmpfs503M0503M0%/tmp
  16. /dev/sdb42.5G3.8M2.4G1%/home
  17. /dev/sdb396M39M58M41%/boot

安装U盘拿掉后,这个U盘就成为 /dev/sdb 了.

配置有线网络:没网络的时候,可以直接设定ip应急,后面 netctl 才是正规设置:

  1. #ipaddradd192.168.0.100/24devenp0s4
  2. #iplinksetdevenp0s4up
  3. #iprouteadddefaultvia192.168.0.1
  4. #echonameserver208.67.222.222>>/etc/resolv.conf

觉得设备名 enp0s4 不习惯,也可以在 udev 中改名(重启生效):

  1. #cat/etc/udev/rules.d/10-network.rules
  2. SUBSYSTEM=="net",ACTION=="add",ATTR{address}=="00:50:70:a2:49:7d",NAME="eth0"

如果使用 dhcd 动态分配地址:

  1. #dhcpcd#自动让eth0获取IP
  2. ##或者配置成服务自启动(更加方便)
  3. #systemctlenabledhcpcd@eth0
  4. #systemctlstartdhcpcd@eth0

如果使用静态地址,现在是用 netctl 进行管理:

  1. #pacman-Sifplugd
  2. #systemctldisabledhcpcd@eth0
  3. #systemctlstopdhcpcd@eth0#要停掉DHCP,不然有干扰
  4. #cd/etc/netctl
  5. #cpexamples/ethernet-statichome
  6. #vihome#设置我的静态IP设置profile
  7. #systemctlenablenetctl
  8. #重启一下,清除刚才的临时IP设置
  9. #netctlstarthome
  10. #netctlenablehome

如果要快速切换网络环境,再在 /etc/netctl/ 下建立一个新的 profile 文件,用 netctl switch-to PROFILE 来进行切换,会自动停掉旧的,更详细的可以看我以前写的 netctl 如何选择 profile.

安装 vim,默认的 vi 实在是用不惯:

  1. #pacman-Svim
  2. #pacman-Rvi
  3. #ln-s/usr/bin/vim/usr/bin/vi

关闭 PC 小喇叭,这个实在是太烦人了,在启动时就禁用:

  1. #cat/etc/modprobe.d/nopcspkr.conf
  2. blacklistpcspkr

这个文件需要自己创建.

安装 ntp 自动更新时间

  1. #pacman-Sntplibedit
  2. #systemctlenablentpd
  3. #systemctlstartntpd

另外,Arch 建议在 /etc/ntp.conf 中添加 iburst 参数,比如:

  1. server0.pool.ntp.orgiburst
  2. server1.pool.ntp.orgiburst
  3. server2.pool.ntp.orgiburst
  4. server3.pool.ntp.orgiburst

检查 ntpd 同步情况:

  1. #systemctlrestartntpd
  2. #ntpq-np

时间同步完成后,用 hwclock -w 写入硬件时钟.

创建普通用户

  1. #useradd-mfwolf
  2. #passwdfwolf

通常,这个用户我们要赋予 sudo 权限:

  1. #pacman-Ssudo
  2. #cat/etc/sudoers.d/fwolf_sudo_conf
  3. Defaultsenv_reset
  4. Defaultssecure_path="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
  5. fwolfALL=(ALL:ALL)ALL
  6. %adminALL=(ALL)ALL
  7. %sudoALL=(ALL:ALL)ALL
  8. #chmod0440/etc/sudoers.d/fwolf_sudo_conf

注意: /etc/sudoers.d/ 下的文件,名称带有 ~ 或者 . 的不会生效,参见 CentOS – 0005017: The #includedir directive in sudoers does not work,文件属性也必须是 0440.

安装 Yaourt,在 /etc/pacman.conf 中添加:

  1. [archlinuxfr]
  2. SigLevel=Never
  3. Server=http://repo.archlinux.fr/$arch

然后 pacman -Sy yaourt 完成安装.

安装其他常用工具:bash-completion ctags git htop openssh subversion tk

图形系统:由于U盘要带着到处跑,所以图形驱动一定是什么都有,也不追求多么花哨的界面效果,简洁明快,所以选择 LXDE+Fluxbox.

字符界面分辨率

默认进入字符界面后,分辨率是最大分辨率,如果要另行指定,可以修改 /etc/default/grub:GRUB_CMDLINE_LINUX_DEFAULT="quiet video-1024x768M@75m"

然后 grub-mkconfig -o /boot/grub/grub.cfg 重新生成 grub 配置文件,默认点亮 Numlock,需要用到两个命令:系统自带的 setleds 和 通过 pacman 安装的 numlockx.

要在字符界面下打开 Numlock,可以在 $HOME/.bashrc 中添加:

  1. #Numlock
  2. if[-x/usr/bin/setleds];then
  3. forttyin/dev/tty{1..6};do
  4. /usr/bin/setleds-D+num</dev/tty>/dev/null2>&1
  5. done
  6. fi

这样设置会在登录之后自动打开 Numlock,若要登录之前就打开,可以参照 Arch Wiki 将上述内容添加到 /etc/rc.local 或者 /etc/inittab,但不如跟着用户配置容易备份.

要在 X 下打开 Numlock,可以在 $HOME/.xinitrc 中添加:

  1. #Setnumlock
  2. if[-x/usr/bin/numlockx];then
  3. /usr/bin/numlockxon
  4. fi

安装 xorg 和显卡驱动:

Xorg:xorg-server xorg-xinit xorg-server-utils mesa

显卡驱动:xf86-video-ati xf86-video-intel xf86-video-nouveau nouveau-dri

笔记本触摸板支持:xf86-input-synaptics

测试 X 工作是否正常:xorg-twm xorg-xclock xterm

现在可以用 startx 启动 X 看到简陋的图形界面了,如果想用 Ctrl+Alt+Backspace 关闭 X,需要在 /etc/X11/xorg.conf.d/10-evdev.conf 中增加一段:

  1. Section"InputClass"
  2. Identifier"KeyboardDefaults"
  3. MatchIsKeyboard"yes"
  4. Option"XkbOptions""terminate:ctrl_alt_bksp"
  5. EndSection

安装 LXDE & Fluxbox

LXDE 组的所有包,Fluxbox,监测文件系统变化的 Gamin,常用软件:leafpad obconf epdfview

配置一个简单的 $HOME/.xinitrc ,从 /etc/skel/.xinitrc 复制一份,然后添加:

  1. #xrandr-s1024x768#如果需要的话,提前指定分辨率
  2. execstartlxde

现在都是液晶的天下,很少出现分辨率刷新率超出界限不显示的情况,命令行下的分辨率可以用自动,嫌字小上面有修改 grub 设置的方法,图形下 LXDE 也支持 auto 分辨率,一般也都自动设置好了.

为了把 Openbox 换成 Fluxbox,需要修改 /etc/xdg/lxsession/LXDE/desktop.conf:

  1. [Session]
  2. window_manager=fluxbox

中文相关

基本字体 ttf-dejavu artwiz-fonts wqy-microhei

输入法 fcitx-im fcitx-configtool fcitx-fbterm,在 $HOME/.xinitrc 里添加:

  1. exportGTK_IM_MODULE=fcitx
  2. exportQT_IM_MODULE=fcitx
  3. exportXMODIFIERS="@im=fcitx"

字体配置,把原先用的其他常用字体和配置文件都搬过来了,就是 $HOME/.fonts 目录,Ubuntu 下用的很好,这里也可以直接用,把 $HOME/.fonts/fonts.conf 链接为 /etc/fonts/local.conf 即生效,然后修改 /etc/fonts/conf.avail 下的 40-nonlatin.conf 和 60-latin.conf 将 SimSun 或者其他你喜欢的字体设置为首选字体,最后 $ fc-cache -vf 更新下字体缓存,重启 X 就可以了.

至此,一个基本的、具备图形界面的 Arch Linux 就安装完成了,pacman -Scc 清理一下,已安装程序占用空间约 1.4G,总体感觉,运行速度受U盘读写速度影响非常大,有时候会卡.

……大约反复两周后,经历了无数次的重装,我终于下了结论:U盘上的 Linux 系统除非只以只读方式使用,否则几乎没有可用性,大概是因为重启、关机时,umount 总是等不及U盘的灯闪来闪去,就强制重启或关机了,然后文件系统未正常 umount,然后就是文件系统损坏,一修复都是文件丢失,损坏的 inode,难道是因为我的U盘质量不好么?不管怎样,拿这个做随身系统的想法破灭了,还是磁介质的机械硬盘靠谱一点.

广告内容

详解在在U盘上安装 ArchLinux 教程 详解在在U盘上安装 ArchLinux 教程 详解在在U盘上安装 ArchLinux 教程

相关阅读

热门评论

木木老贼 木木老贼

互联网营销达人~

总篇数181

精选文章

RMAN中catalog和nocatalog区别介绍 小技巧:为Linux下的文件分配多个权限 zimbra8.5.1安装第三方签名ssl证书的步骤 解决mysql不能远程连接数据库方法 windows服务器mysql增量备份批处理数据库 mysql中slow query log慢日志查询分析 JavaScript跨域问题总结 Linux下负载均衡软件LVS配置(VS/DR)教程 mysql中权限参数说明 MYSQL(错误1053)无法正常启动

SEO最新算法