ArchLinux 双系统安装

在存在 Windows 系统的环境下安装 Arch Linux 双系统。

划分空间

在 Windows 下使用磁盘管理压缩卷,或第三方软件DiskGenius划分一片空白空间用来安装 Linux 。

制作启动盘

Windows 下推荐使用 rufus,下载完之后双击运行,选择镜像后制作启动盘。 {% note success %} rufus 下载地址: Rufus {% endnote %}

准备启动

进入 BIOS 选择从 U 盘启动后,选择第一项,等待一会儿以后出现终端界面。

root@archiso ~ #

联网

如果是自动获取 IP 地址的有线网络,那么什么也不用做,可以输入下列命令来检查一下网络。

ip a

如果不是有线的话,可以通过 iwd 来连接无线网络。使用iwctl命令进入 iwd 的 shell。

root@archiso ~ # iwctl
# 以下的操作都在 iwctl 的 shell 中,输入 help 可获得可用的命令。
# 列出无线网络设备,即查看网卡名称
[iwd]# device list
# 用所指定的设备扫描网络(用上一步的设备名称替换 device)
[iwd]# station device scan
# 扫描列出所有的网络
[iwd]# station device get-networks
# 连接到网络, SSID 就是你要连接的网络的名称
[iwd]# station device connect SSID
# 如果所连接的网络需要密码,则接下来会提示输入,也可以直接在 iwctl 命令中输入
root@archiso ~ # iwctl --passphrase passphrase station device connect SSID
# 退出iwd模式
exit

连接成功之后,可以通过下列命令检查是否能连接到 pacman 源。

pacman -Syy

重新设置mirrorlist(可选)

使用 reflector 来获取速度最快的6个镜像,并将地址保存至 /etc/pacman.d/mirrorlist

reflector -c China -a 6 --sort rate --save /etc/pacman.d/mirrorlist

时间同步

使用下列命令保证时间同步,因为有不少操作需要准确的时间,例如 HTTPS 和 GnuPG 都需要准确的时间来验证证书的有效性。

timedatectl set-ntp true

如果因为各种原因没法同步的话,也可以通过命令手动设置。

timectl set-time "2016-10-28 17:39:42"

准备硬盘空间(UEFI)

在 UEFI 模式下用 cgdisk 来给硬盘分区。

首先输入 lsblk 查看硬盘是哪个设备,结果如下。

root@archiso ~ # lsblk
NAME            FSTYPE   LABEL          UUID                    MOUNTPOINT
nvme0n1
├─nvme0n1p1     vfat                    3C44-B4ED
├─nvme0n1p2
└─nvme0n1p3     ntfs                    58741F29741F0A00
sdb
└─sdb1          vfat     ARCH_202206    EAC8-F012                /run/archiso/bootmnt
sr0
loop0           squashfs                                         /run/archiso/sfs/airootfs

这里没有看到之前划分好的空间,因为在该空间上还没有建立分区。 输入 cgdisk /dev/name来设置硬盘分区。

cgdisk /dev/nvme0n1

如果在用 cgdisk 时看到这样的提示的话:

Warning! Non-GPT or damaged disk detected! This program will attempt to
convert to GPT form or repair damage to GPT data structures, but may not
succeed. Use gdisk or another disk repair tool if you have a damaged GPT
disk.


                        Press any key to continue....

这表示 cdgisk 在这块硬盘上找不到 GPT 分区表。如果这是一块新硬盘或者已经清空的硬盘的话不必担心,继续即可。否则请立即停下来检查一下硬盘。

cgdisk 的界面大概像这样,用上下方向键把光标移动到之前的空闲空间上去(例如这里是最后一个)

                                            cgdisk 1.0.1

                                        Disk Drive: /dev/nvme0n1
                                    Size: 972906545, 463.9 GiB

Part. #     Size        Partition Type            Partition Name
----------------------------------------------------------------
            1007.0 KiB  free space
1           512.0 MiB   EFI System                EFI system partition
2           16.0 MiB    Microsoft reserved        Microsoft reserved partition
3           103.4 GiB   Microsoft basic data      Basic data partition
            106.6 GiB   free space



    [ Align  ]  [ Backup ]  [  Help  ]  [  Load  ]  [  New   ]  [  Quit  ]  [ Verify ]  [ Write  ]

用左右方向键把下面一排按钮上的光标移动到 New 上,然后回车确认。 接下来会问几个问题:

# 数字会不同
# 起始扇区的位置,直接 Enter 就行
First sector (749424640-972906511, default = 749424640):
# 大小,可以是扇区数,也可以是实际的大小(例如 100M,20G一类的),要用掉整个剩余空闲空间的话,直接 Enter 就行。
Size in sectors or {KMGTP} (default = 223481872):
# 分区类型,默认的就好
# 如果要建立新的 EFI 系统分区的话 ,分区类型是 ef00
# 如果要建立新的 交换空间 的话 ,分区类型是 8200
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300):
# 设置卷标,不设置也行。
Current partition name is ''
Enter new partition name, or <Enter> to use the current name:

操作结束后,此时下面的空闲空间应该已经变成了 Linux filesystem。 用左右方向键把下面一排按钮上的光标移动到 Write 上,然后回车确认,来保存分区表。此时会提示如下。

Are you sure you want to write the partition table to disk? (yes or no):

        Warning!! This may destroy data on your disk!

在这里输入 yes ,然后按 Enter。下面会闪过一行 “The operation has completed successfully” ,这时就可以退出了。 用左右方向键把下面一排按钮上的光标移动到 Quit 上,然后按 Enter。 接下来首先用 lsblk 确定一下分区的名称,为了以防万一可以加上 -f 参数,此时界面提示如下。

root@archiso ~ # lsblk -f
NAME            FSTYPE   LABEL          UUID                  MOUNTPOINT
nvme0n1
├─nvme0n1p1     vfat                    3C44-B4ED
├─nvme0n1p2
├─nvme0n1p3     ntfs                    42E243C5E243BBC3
└─nvme0n1p4
sdb
└─sdb1          vfat      ARCH_201610   EAC8-F012             /run/archiso/bootmnt
sr0
loop0           squashfs                                      /run/archiso/sfs/airootfs

分区格式化

mkfs.ext4 将刚刚分好的区格式化为 ext4 格式,这里认准分区号是 nvme0n1p4

mkfs.ext4 /dev/nvme0n1p4

应该出现如下提示

root@archiso ~ # mkfs.ext4 /dev/nvme0n1p4
mke2fs 1.43.3 (04-Sep-2016)
Creating filesystem with 27935234 4k blocks and 6987776 inodes
Filesystem UUID: a3943e57-6217-4a5f-8e57-ade5771315c0
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
    4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done
Writing inode tables: done
Creating journal (131072 blocks): done
Writing superblocks and filesystem accounting information: done

root@archiso ~ #

等一排文字闪过就格式化完了。

如果要格式化新的 EFI 系统分区的话,用 mkfs.vfat 如果要格式化新的交换空间的话,用 mkswap

挂载分区

接下来用 mount 挂载分区。 先挂载 / 分区。

mount /dev/nvme0n1p4 /mnt

接下来建立 boot 文件夹。

mkdir /mnt/boot

然后挂载 EFI 分区(此处分区名字是你的EFI分区所在分区)

mount /dev/nvme0n1p1 /mnt/boot

编辑软件仓库镜像地址

软件仓库是软件包存储的地方。通常我们所说的软件仓库指在线软件仓库,亦即用户从互联网获取软件的地方。打开 /etc/pacman.d/mirrorlist

nano /etc/pacman.d/mirrorlist

界面会显示如下

root@archiso ~ # nano /etc/pacman.d/mirrorlist

GNU nano 2.7.0                        File: /etc/pacman.d/mirrorlist

##
## Arch Linux repository mirrorlist
## Sorted by mirror score from mirror status page
## Generated on 2016-10-01
##

## Score: 0.2, France
Server = http://archlinux.polymorf.fr/$repo/os/$arch
## Score: 0.3, France
Server = http://arch.tamcore.eu/$repo/os/$arch
## Score: 0.3, Germany
Server = http://mirrors.cicku.me/archlinux/$repo/os/$arch
## Score: 0.3, Czech Republic
Server = http://ftp.sh.cvut.cz/arch/$repo/os/$arch
## Score: 0.3, Germany
Server = http://mirror.js-webcoding.de/pub/archlinux/$repo/os/$arch
## Score: 0.4, Netherlands
Server = http://ftp.nluug.nl/os/Linux/distr/archlinux/$repo/os/$arch
## Score: 0.4, Poland
                                        [ Read 517 lines ]
^G Get Help    ^O Write Out   ^W Where Is    ^K Cut Text    ^J Justify     ^C Cur Pos     ^Y Prev Page
^X Exit        ^R Read File   ^\ Replace     ^U Uncut Text  ^T To Spell    ^_ Go To Line  ^V Next Page

这是 GNU nano 的主界面,可以先把下面那些 Mirrors 先全删掉然后输入一个新的,用光标指向某一行以后同时按下 Ctrl+K 。然后自己输入一个 Mirror ,下面给出几个中国国内的 Mirror:

# 网易
Server = http://mirrors.163.com/archlinux/$repo/os/$arch
# 清华大学 TUNA 协会
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch
# 中国科学技术大学
Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch
# 西安交通大学
Server = https://mirrors.xjtu.edu.cn/archlinux/$repo/os/$arch

输入完以后按下 Ctrl+O 写入,按 Enter 确定,再按 Ctrl+X 退出。 然后用 pacman -Syy 刷新一下软件包数据库。

root@archiso ~ # pacman -Sy
:: Synchronizing package databases...
core                                  120.9 KiB  4.92M/s 00:00 [##################################] 100%
extra                                1755.6 KiB  5.24M/s 00:00 [##################################] 100%
community                               3.7 MiB  6.82M/s 00:01 [##################################] 100%
root@archiso ~ #

安装基本系统

下面就要安装最基本的 ArchLinux 包到磁盘上了。这是一个联网下载并安装的过程。 用 pacstrap 安装基本系统。

首先需要安装 base 元包(包含基本系统所需的依赖)和内核。

目前官方仓库里有这些内核:

linux : 当前的稳定版本内核。 linux-lts : 当前的长期支持版本内核。 linux-hardened : 来自 anthraxx 的安全强化内核。 linux-zen : 来自 zen-kernel 的预载一定量优化的内核,有人觉得在心理上会觉得跑得比 linux 快。

还需要安装固件包 linux-firmware 以及一个文字编辑器,例如刚才用到的 nano,以及一些文件系统工具,这里使用了 ext4 格式,安装 e2fsprogs 就好,需要读写其它文件系统的话,可以在 File_system 找到相应的用户空间工具。

要通过 AUR 或者 ABS 编译安装软件包的话, 还需要安装 base-devel。 如果要通过刚刚用过的 iwctl 连接无线网络的话,可以安装 iwd,我这里选择另外一个工具。

pacstrap /mnt base base-devel linux linux-firmware nano e2fsprogs

生成 fstab

fstab 文件可用于定义磁盘分区,各种其他块设备或远程文件系统应如何装入文件系统。每个文件系统在一个单独的行中描述。

genfstab -U /mnt >> /mnt/etc/fstab

生成后可以检查一下生成的 fstab 文件。

cat /mnt/etc/fstab

正式配置新系统

切换到装好的系统

Chroot 意为 Change root,相当于把操纵权交给我们新安装的 Linux 系统,执行了这步以后,我们的操作都相当于在磁盘上新装的系统中进行。

arch-chroot /mnt

创建交换空间

建立swapfile

如果之前安装的内核是 linux-lts ,可以直接执行下列命令。

fallocate -l 2GB /swapfile

命令中的 l 是小写字母l。

如果之前安装的内核不是 linux-lts ,这里创建 swapfile 需要使用 dd 命令。

dd if=/dev/zero of=/swapfile bs=2048 count=1048576 status=progress

这里分了 2G 作为 swapfile。

修改权限
chmod 600 /swapfile
建立swap空间
mkswap /swapfile
激活swap空间
swapon /swapfile

修改 /etc/fstab文件

nano /etc/fstab

在文件末尾输入

/swapfile none swap defaults 0 0

保存后退出。

设置时区

timedatectl set-timezone Asia/Shanghai

或者通过下列命令来设置。

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

然后同步硬件时钟。

hwclock --systohc

{% note warning %} 进入 Windows 以后会发现 Windows 的时间不对了,因为 Windows 默认的硬件时钟是 localtime。 可以用一条注册表键值让 Windows 使用 UTC 作为硬件时钟,参见 ArchWiki 。 {% endnote %}

指定本地化类型

/etc/locale.gen 是一个仅包含注释文档的文本文件,指定您需要的本地化类型,去掉对应行前面的注释符号(#)即可。

nano /etc/locale.gen

Ctrl+W 输入 #en_US 后回车,找到含有 UTF-8 那一行,删掉前面的 #(取消注释)。 Ctrl+W 输入 #zh_CN 后回车,找到含有 UTF-8 那一行,删掉前面的 #(取消注释)。 Ctrl+W 输入 #zh_TW 后回车,找到含有 UTF-8 那一行,删掉前面的 #(取消注释)。 Ctrl+W 输入 #zh_HK 后回车,找到含有 UTF-8 那一行,删掉前面的 #(取消注释)。 保存退出后,生成 locale

locale-gen

设置本地化选项

将系统 locale 设置为 en_US.UTF-8,系统的 Log 就会用英文显示,这样更容易问题的判断和处理。

{% note warning %} 不推荐在此设置任何中文 locale,或导致 tty 乱码。 {% endnote %}

echo LANG=en_US.UTF-8 > /etc/locale.conf

或者使用下面命令打开该文件后,

nano /etc/locale.conf

输入下面字段

LANG=en_US.UTF-8

保存退出。

设置主机名

设置一个喜欢的主机名(这里我使用的是arch,你可以用你想要设置的主机名代替 arch )

echo arch > /etc/hostname

或者使用 nano /etc/hostname,在文件里添加 arch 后保存退出。

设置 root 用户密码

passwd

出现如下提示后输入密码。

[root@archiso /]# passwd
New password:
Retype new password:
passwd: password updated successfully

修改hosts

nano /etc/hosts

写入内容如下(中间的空白用tab而非空格),arch替换为你之前的hostname

127.0.0.1   localhost
::1         localhost
127.0.1.1   arch.localdomain    arch

创建启动器

启动加载器是 BIOS 或 UEFI 启动的第一个程序。它负责使用正确的内核参数加载内核, 并根据配置文件加载初始化 RAM disk,此处使用 GRUB 。

{% note default %} 如果对其它的启动管理器有兴趣的话, 可以参考 ArchWiki {% endnote %}

UEFI 用户需要先再安装几个必要的软件包, efibootmgr 用于修改 UEFI 固件中的某些信息,dosfstools 包含了操作 FAT/FAT32 文件系统所需的用户空间工具, networkmanager 用于无线上网, ntfs-3g 用于操作 Windows 文件, 然后安装 GRUB , 如果你的硬盘上还有其它系统,还需要安装 os-prober

pacman -S efibootmgr dosfstools grub os-prober networkmanager ntfs-3g sudo

如果你是intel的CPU,还需要安装intel的微码文件

pacman -S intel-ucode

如果是amd的CPU,则需要安装

pacman -S amd-ucode

{% note warning %} 使用 os-prober 时需要执行下列操作。 将 /etc/default/grub 文件最后一行的 GRUB_DISABLE_OS_PROBER=false 前面的注释(#)去掉。 {% endnote %}

将 GRUB 安装到硬盘(UEFI)

grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=Arch

出现如下提示。

[root@archiso /]# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=Arch
Installing for x86_64-efi platform.
Installation finished. No error reported.

生成配置文件 grub.cfg

grub-mkconfig -o /boot/grub/grub.cfg

出现如下提示。

[root@archiso /]# grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-linux
Found initrd image(s) in /boot: initramfs-linux.img
Found fallback initrd image(s) in /boot: initramfs-linux-fallback.img
done

{% note default %} 如果之前安装了 os-prober 可能会看到这样的警告。

WARNING: Failed to connect to lvmetad. Falling back to device scanning.

这是因为在 chroot 环境里面 /run 是不可用的。这些警告不会影响系统启动,如果重启之后没看到 Windows 的启动项,试着进入 Arch 后运行那条生成配置文件的命令。 {% endnote %}

进入并配置新系统

离开 chroot 环境

exit

卸载挂载的分区

umount -a

重启

reboot

注 : 启动时请拔出u盘

重启进去之后,先输入用户名 root 回车,接着输入密码后回车。

启动网络服务

systemctl enable --now NetworkManager

设置WiFi

nmtui

选择你要连接到的 WiFi 输入密码后回车,然后退出。

新建用户并授权

useradd -m -G wheel chuest

wheel后面是你的用户名,这里输入的是 chuest

为用户创建密码

passwd chuest

输入并确认密码。

设置 sudo

nano /etc/sudoers

Ctrl+W 输入 # %wheel 回车 找到下面这行然后删除前面的 #(取消注释)

# %wheel ALL=(ALL) ALL

然后就可以保存退出了。(效果就是注释里说明的,给 wheel 组执行所有命令的权限)

安装显卡驱动

Nvidia的独显驱动如非必要,建议只装集成显卡的驱动(省电,如果同时装也会默认使用集成显卡),不容易出现冲突问题。

安装AMD集显驱动
pacman -S xf86-video-amdgpu
安装NVIDIA独显驱动
pacman -S nvidia nvidia-utils

安装可视化界面

安装Display Server

这里使用是 xorg,Xorg 是 Linux 下的一个著名的开源图形服务,我们的桌面环境需要 Xorg 的支持。

pacman -S xorg

这时会让你选择需要哪些软件包,大多数时候默认直接回车即可。

[root@archiso /]# pacman -S xorg
:: There are 80 members in group xorg:
:: Repository extra
1) xf86-input-evdev  2) xf86-input-joystick  3) xf86-input-keyboard  4) xf86-input-libinput
5) xf86-input-mouse  6) xf86-input-synaptics  7) xf86-input-vmmouse  8) xf86-input-void
9) xf86-video-amdgpu  10) xf86-video-ark  11) xf86-video-ati  12) xf86-video-dummy
13) xf86-video-fbdev  14) xf86-video-glint  15) xf86-video-i128  16) xf86-video-intel
17) xf86-video-mach64  18) xf86-video-neomagic  19) xf86-video-nouveau  20) xf86-video-nv
21) xf86-video-openchrome  22) xf86-video-r128  23) xf86-video-savage  24) xf86-video-siliconmotion
25) xf86-video-sis  26) xf86-video-tdfx  27) xf86-video-trident  28) xf86-video-vesa
29) xf86-video-vmware  30) xf86-video-voodoo  31) xorg-bdftopcf  32) xorg-docs  33) xorg-font-util
34) xorg-fonts-100dpi  35) xorg-fonts-75dpi  36) xorg-fonts-encodings  37) xorg-iceauth
38) xorg-luit  39) xorg-mkfontdir  40) xorg-mkfontscale  41) xorg-server  42) xorg-server-common
43) xorg-server-devel  44) xorg-server-xdmx  45) xorg-server-xephyr  46) xorg-server-xnest
47) xorg-server-xvfb  48) xorg-server-xwayland  49) xorg-sessreg  50) xorg-setxkbmap
51) xorg-smproxy  52) xorg-x11perf  53) xorg-xauth  54) xorg-xbacklight  55) xorg-xcmsdb
56) xorg-xcursorgen  57) xorg-xdpyinfo  58) xorg-xdriinfo  59) xorg-xev  60) xorg-xgamma
61) xorg-xhost  62) xorg-xinput  63) xorg-xkbcomp  64) xorg-xkbevd  65) xorg-xkbutils  66) xorg-xkill
67) xorg-xlsatoms  68) xorg-xlsclients  69) xorg-xmodmap  70) xorg-xpr  71) xorg-xprop
72) xorg-xrandr  73) xorg-xrdb  74) xorg-xrefresh  75) xorg-xset  76) xorg-xsetroot  77) xorg-xvinfo
78) xorg-xwd  79) xorg-xwininfo  80) xorg-xwud

Enter a selection (default=all):
安装桌面环境

这里使用 KDE Plasma

pacman -S plasma kde-applications
安装桌面管理器

我们需要安装一个图形化的桌面管理器来帮助我们登录并且选择我们使用的桌面环境,KDE 和 sddm 一起使用最好。

pacman -S sddm

设置开机自动启动 sddm

systemctl enable sddm

安装中文字体

此处使用思源黑体简体中文、韩文、日文、繁体中文

pacman -S adobe-source-han-sans-cn-fonts adobe-source-han-sans-kr-fonts adobe-source-han-sans-jp-fonts adobe-source-han-sans-tw-fonts

更多的字体可以在 ArchWiki 找到。

进入图形桌面环境

reboot

输入之前创建的用户和密码登录系统。

启用archlinuxcn社区源

在 /etc/pacman.conf 文件末尾添加以下两行(或者从后边的镜像中选择一个):

[archlinuxcn]
Server = https://repo.archlinuxcn.org/$arch

一些镜像源

## 清华大学 (北京) (ipv4, ipv6, http, https)
[archlinuxcn]
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/$arch
## 中国科学技术大学 (安徽合肥) (ipv4, ipv6, http, https)
[archlinuxcn]
Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch
## 网易 (China CDN) (ipv4, http, https)
[archlinuxcn]
Server = https://mirrors.163.com/archlinux-cn/$arch

之后安装 archlinuxcn-keyring 包以导入 GPG key。

sudo pacman -S archlinuxcn-keyring

安装yay来使用AUR

git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si

如果之前启用了 archlinuxcn, 可以直接使用 pacman 安装

sudo pacman -S yay

安装中文输入法fcitx5

安装中文支持、输入模块、输入法主题、配置工具

sudo pacman -S fcitx5-im fcitx5-chinese-addons fcitx5-chewing fcitx5-material-color

系统设置中搜索fcitx,或者在个性化->区域设置->输入法中找到fcitx5的配置,启动fcitx5

先在右下角添加,添加‘pinyin’输入法,然后选择“配置全局选项“

翻到最下面,“行为”中把默认状态为激活钩上,并共享输入状态

安装 zsh

sudo pacman -S zsh git
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
yay -S zsh-syntax-highlighting zsh-autosuggestions
sudo ln -s /usr/share/zsh/plugins/zsh-syntax-highlighting /home/chuest/.oh-my-zsh/plugins
sudo ln -s /usr/share/zsh/plugins/zsh-autosuggestions /home/chuest/.oh-my-zsh/plugins

安装 Edge 浏览器

yay -S microsoft-edge-stable-bin

SDDM本地化的问题 上一步会将系统内99%都变成中文,但是开机登陆的时候还会是英文,这里我们需要修改 /usr/lib/systemd/system/sddm.service 在 [Service] 条目下面增加一行内容:

sudo vim /usr/lib/systemd/system/sddm.service Environment=LANG=zh_CN.UTF-8

若 kde 自带的应用商店报错: 未找到可用的程序后端, 可以安装下面的一些包来解决问题:

sudo pacman -S archlinux-appstream-data packagekit-qt5 flatpak fwupd Archlinux 提升 makepkg 速度 使用并行编译 在 /etc/makepkg.conf 中找到 MAKEFLAGS,设置为

MAKEFLAGS="-j4"

数字应改为电脑 CPU 核心数(或线程数)

多线程压缩 安装 pigz 和 pbzip2

sudo pacman -S pigz pbzip2

修改以下几行

COMPRESSXZ=(xz -c -z - –threads=0) COMPRESSGZ=(pigz -c -f -n) COMPRESSBZ2=(pbzip2 -c -f) COMPRESSZST=(zstd -c -z -q - –threads=0)

启用 multilib 在 /etc/pacman.conf 中取消 multilib 前 # 号注释

[multilib] Include = /etc/pacman.d/mirrorlist

双系统时,在Ububtu&&Linux Mint下不能在windows分区下写入文件或者文件夹 我在找这个问题的答案时,发现有很多重新挂载分区磁盘的。或者是说,windows没有彻底关闭,重新启动关闭windows再进入Linux,但是并没有解决我的问题,我在查找了很多博客文章后。最后成功解决是,问题出在了,window10,没有关闭快速启动,只要在windows中关闭快速启动,再重新启动Linux就可以解决无法写入文件的问题。

果你双引导Windows和Linux,可能已注意到从Linux挂载NTFS分区时,有时无法写入该分区。你可以读取其中的任何内容,却无法删除文件、对文件改名、修改文件或编写新的文件和目录。

为什么无法从Linux写入到Windows分区?

之所以出现这种情况,是由于分区以只读模式挂载。挂载Windows分区时,一些文件管理器会显示通知对话框,对此发出警告。另一些文件管理器只字未提,你根本无法在NTFS文件系统上执行任何写入操作。

你可能会问:“但为什么分区以只读模式挂载?”这是由于一项名为“快速启动”(Fast Startup)的功能。长话短说,关闭计算机时,Windows将一部分随机存取存储器(RAM)保存到磁盘。下次启动时,它将该部分内容重新加载到内存中。

这样快得多,因为它几乎是简单的复制操作,从磁盘复制到内存。相反,在正常引导时,必须从磁盘读取文件,然后CPU必须处理大量数据以完成初始化工作。如果听起来很抽象,不妨这么想:“正常引导”时,就像从头开始准备食物,然后将其放入烤箱。“快速引导”时,就像从冰箱取出已经准备好的食物、重新加热。

这是一项安全功能

回顾一下,Windows关闭时,它使核心操作系统数据休眠进入到磁盘。系统在休眠后引导时,它恢复、启动得更快。由于休眠冻结了一些内存数据和操作系统状态,并将其保存到磁盘,因此改动该磁盘上的任何数据都是有风险的。

设想一个程序正在执行某操作。它有几个打开的文件,部分内容写入到这些文件。系统关闭时,程序代码保存到磁盘,以便以后可以恢复。如果你修改程序的文件,应用程序恢复运行时,它找不到正在处理的数据,因此它会崩溃,或完全丧失所有进度,这种情况可能很难恢复。

如何使NTFS分区可以从Linux写入?

有两种解决方法,各有其缺点。如果你很少需要从Linux写入到Windows分区上,尝试下一节中提到的内容。

引导进入到Windows,并重启而不是关机

是的,这有点不方便,但这也是解决你问题的最快方法,不需要像其他解决方法那样长期更改任何内容。

1.如果你目前在使用Linux,请重启。

2.引导进入到Windows。

3.点击开始菜单,选择重启而不是关闭。

4.最后,重新引导进入到Linux,你应该能够以读取/写入模式挂载Windows NTFS分区。

Windows重启时,不会在下次启动时使用“快速启动”功能。这意味着它不会进入休眠状态、获取系统运行状态的快照或将任何内存数据保存到磁盘。分区上没有休眠数据,这意味着可以安全地写入到分区上,Linux会识别出这一点。

万一出现混淆,你不必每次都完成所有四个步骤。只要上次你引导进入的是重启而不是关闭的Windows,Linux就能写入到NTFS分区上。

禁用快速启动

如果你常常需要从Linux写入到Windows分区上,这很有用。缺点是微软的操作系统需要更长的引导时间。

要禁用快速启动,鼠标右击开始菜单,然后鼠标左击“电源选项”。

查找“额外的电源设置”,然后点击文本。如果窗口太小,你可以在窗口右侧找到它,或者向下滚动才能找到它。

接下来,点击“选择电源按钮的功能”。

然后点击“更改当前不可用的设置”。

不要选择“开启快速启动”,然后点击窗口右下方的“保存更改”按钮。

结论

这些是安全的方法。如果你愿意冒险,这个Linux命令在过去适用。(不过它在现代Windows版本中不适用。)将“/dev/sda4”换成你NTFS分区的正确的设备名称。如果你不知道设备名称,可以按照本教程( https://www.maketecheasier.com/lsblk-list-storage-information-linux/ )来查找。

sudo mount -o remove_hiberfile /dev/sda4 /mnt 记住,你可能会搞砸Windows的下一次引导过程,因此只有在你搞得定可能要修复Windows问题这种风险的前提下尝试。如果这对你管用,你会在“/mnt”目录中找到Windows分区的内容。 1、查看电脑分区信息 电脑分区信息如我上一篇博客所示,打开win10磁盘管理器,可以看到相应分区信息,具体如下图(根据个人分区方式会不同):

这里说明下,磁盘1中标红色的为Ubuntu下各分区信息,分别为:swap分区,EFI分区,/home分区,/usr分区和/分区。这里可以直接删除swap分区,/home分区,/usr分区和/分区。接下来要做的就是删除EFI分区以及修改win10EFI分区(不修改的话还会有Ubuntu启动项)。

2、删除EFI分区 要删除Ubuntu系统下的EFI分区,有各种软件和方法,这里推荐直接用windows下的diskpart来删除,省得安装第三方流氓软件。

首先用管理员权限打开cmd,输入【diskpart】,利用【list disk】查询磁盘信息。

这里我们Ubuntu装在磁盘1中,所以选择磁盘1【select disk 1】,然后查看磁盘1下所有分区信息【list partition】,可以看到我们Ubuntu的EFI分区为488MB,根据分区大小这里选择分区4【select partition 4】。然后删除它【delete partition override】。如下图所示:

删除之后就会发现磁盘1中多出了一块200G的未分配空间。

3、修改win10启动项 如果这样结束,开机按F9或F12会发现启动项里还会有Ubuntu启动项:

这是因为在安装Ubuntu后,Ubuntu的引导信息也写在了win10的EFI启动分区里。如果不删除的话,以后再安装Ubuntu会出现很多个Ubuntu启动项。

在win10下我们无法访问EFI分区,因为没有盘符。如图所示: ————————————————

这里我们还是利用diskpart来操作,首先进入磁盘0为EFI分区分配盘符。操作如下:

先选择磁盘0【select disk 0】即win10系统所在的磁盘。 查看分区列表以确定具体分区【list partition】。 根据容量(这里是260MB)选择分区【select partition 1】。 为win10的EFI分区分配盘符【assign letter=p】这里p为盘符,字母A~Z应该都可以(大小写无关,自动转成大写),不要和已有的盘符重复即可。 这时再次查看win10磁盘会发现有个p盘,就是我们刚刚分配的EFI分区,如下图 直接打开我们会发现权限不够,打不开。这里我们要运用一个小技巧,先用管理员权限打开记事本,然后通过记事本菜单栏里的【打开】来访问P盘,会发现P盘里有个EFI文件夹,打开EFI文件夹,发现如下目录(电脑不一样可能会稍有不同): 这里直接删除ubuntu文件夹就可以了。

此时再回到diskpart删除EFI分区盘符P【remove letter=p】。

注:这里利用记事本是借用能用管理员权限打开记事本,记事本就被赋予了管理员权限,相当于使用管理员权限访问p盘,其他能用管理员权限的软件应该也都可以,因为记事本方便且简单所以这里采用记事本。

默认10秒,有时有点措手不及,这里改成60秒

超级权限修改 /etc/default/grub 文件内容。(权限修改保存文件简单方法sudo gedit /etc/default/grub)

终端运行 sudo update-grub 重启可以看到等待时间变长

主题