









自己有一台日用台式机,硬盘是只有 512 GB 的一块金士顿A2000,实际上容量甚是不足,且读写速度也极为一般,只在2000MB/s左右,若是已占用空间较多的话,甚至只有1200MB/s左右了。
电脑配于2021年底,不过当时觉得512G已经很大了,且预算紧张,毕竟当年的固态硬盘价格并非是现在那么便宜的,便憋屈使用至今。
卖掉了小学时期比赛的机器人,拿到了几百块钱,便想着发挥一点作用,毕竟电脑空间不足,就在pdd花三百多入手了一块 1TB1TB=1024GB 的铠侠 SD10,实在真香啊😋性能简直是暴打老硬盘:
*老硬盘,只以微弱的4k性能优势获胜,原因是腾空了:
既然如此,性能这么好的新硬盘,为何不给系统盘用呢,还可以腾出大量的空间来进行扩容。
事情开始变得复杂起来了,跟别人不一样的是,我安装了ArchLinux+Windows11双系统,在双系统的迁移过程中,由于两边系统文件系统互相不兼容,即使是一些第三方解决方案例如DiskGenius 、ntfs-3g也无法做到很好,于是就造成了超级麻烦的在ArchISO、WinPE、ArchLinux、Windows11和BIOS之间切换。
可是讨厌了,接下来便是超级漫长的无数踩坑过程QwQ——
叠甲:由于PE无法连接网络与方便的传输文件,所以在 ArchISO 和 WinPE 下大量采用了拍屏方案,如有不适请谅解!
首先尝试的便是DiskGenius的磁盘克隆功能了,找到一个刻录了WinPE的U盘插入电脑进BIOS改启动项进入PE,然后找到DiskGenius打开,理论上来说,只需要右键硬盘克隆然后按照指引便可完成。
看起来挺顺利的,不幸的是,因为我希望扩容原盘的两个系统的系统盘,但是DG的磁盘扩容功能不支持跟空闲空间隔着 ESP MSR 和Swap之类的分区的情况进行,好巧不巧,我的Swap分区正好放在了rootfs的后面,而且ESP分区在原盘的最后,于是空闲空间就在Swap和ESP分区之后了。
为什么就不可以把
ESP和Swap分区给删掉,这不就可以扩容了么?
那更坏的消息是:DiskGenius直接将ArchLinux创建的ext4分区标记为了损坏分区,似乎是因为ext4支持不完善,总之只要有分区是损坏的,DiskGenius就无法正常进行磁盘扩容和分区调整了,此方法失败。
还有什么办法呢?
DiskGenius还有一个分区克隆的功能,这个功能更加灵活,支持不依赖文件系统底层结构的文件级克隆 (同时也支持扇区级的克隆),且速度极快,不会产生使用Windows资源管理器直接复制产生的4k读写速度不足的尴尬场面。
于是便可以在新硬盘上面分好想要的分区,然后一对一的克隆ESP Swap之外的分区即可:
为什么中间要留120GB的空闲空间呢?
前面说到,DiskGenius 会将 ArchLinux 创建的 ext4 分区视为 损坏分区,这导致DiskGenius 很难直接操作这些分区,于是只能后续在ArchISO进行分区迁移操作了。
现在便处理好了NTFS分区的文件克隆了,接下来来修复引导!
先尝试修复Windows的引导。
正常来说,创建一个 ESP 分区找到一个引导修复工具就可以解决问题了:
不出意外的话,就出意外了。
重启进入BIOS,见引导列表仅有原盘,然后离之见仍为原系统,遂又进PE,重建之,再重启,仍无。
开BOOTICE,求得BCD编辑,实已具。
头痛甚,尝:
bcdedit /enum失败。
实为二ESP分区所混淆,遂删除原盘上的ESP分区。
现在BIOS里面总算出现了新的硬盘名称KIOXIA EXCERIA,已经不是KINGSTON SA200500G了,但是一开机,又出了逝:
太奇怪了,于是进PE反复折腾了一个多小时,最后在BIOS的 启动项BBS顺序 发现了两个一样的Windows Boot Manager,尝试交换两者,成功启动(甚至退出BIOS时会显示无任何更改
成功启动转圈圈,但没完。
进入了锁屏页面,但是发现不断的闪屏,模糊效果出错,输入密码之后系统卡死,Ctrl+Alt+Delete失效,explorer灰屏,打开任务管理器,运行diskmgmt.msc,发现系统盘变为了F盘,导致大多数内容失效。
折腾半天没有头绪,于是用了笨方法:删除掉了原硬盘的所有非Linux分区,此时开机系统盘因为在首位就自动变成C盘了,问题解决。
这样子做的话有 数据安全风险 ,建议不要效仿,不然要是不小心炸了系统盘的话就没有备份了((
接下来得想办法把ArchLinux给打开了。
因为我只有一个U盘,所以只能重新下载ArchISO然后覆盖上原来的PE了,本来想用Rufus复制的,结果 Rufus它不行!
遂尝试安装WSL然后dd上去,不出意外的话,又出意外了:
PS > sudo wsl --import Ubuntu F:\ F:\install.tar
拒绝访问。
Error code: Wsl/E_ACCESSDENIED😡😡😡
尝试数次,无效。
遂启动balanaEtcher,烧录成功。
😋
接下来就可以启动ArchISO盘了,在cfdisk中将原来的空闲分区新建一个,然后开始拷贝分区:
mkfs.ext4
dd if=/dev/nvme0n1p2 of=/dev/nvme1n1p6 bs=4M status=progress
e2fsck /dev/nvme1n1p6
resize2fs /dev/nvme1n1p6在cfdisk中像往常一样新建swap,然后进入环境并挂载
~事实上我这一步卡了半个小时因为/dev/nvme1n1p6打成了/dev/nvme1p6~
mount /dev/nvme1n1p6 /mnt
arch-chroot /mnt
mkswap /dev/nvme1n1p7
swapon /dev/nvme1n1p7
mount /dev/nvme1n1p4 /boot重建/etc/fstab(如果原来默认挂载了Windows下的磁盘的话,得在引导整好之后进系统改fstab):
genfstab / -U > /etc/fstab重装linux内核包以触发mkinitcpio钩子,如果用的是linux-zen之类的同样重装相应包即可:
pacman -S linux现在ls /boot就有了linux的内核镜像了。
接下来运行grub修复启动:
先在/etc/default/grub中取消注释或添加GRUB_DISABLE_OS_PROBER=false,然后:
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub --recheck
grub-mkconfig -o /boot/grub/grub.cfg现在就可以重启了:
exit
reboot接下来在BIOS中修改默认启动项为grub即可看到grub。
然后回车就能启动Arch了!!!
先重新挂载Windows下的磁盘,然后重建/etc/fstab为GUID格式:
sudo genfstab -U / > /etc/fstab你会发现grub里面并没有Windows,且还是英文,所以在进入系统之后再次重建grub就可以了:
sudo grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub --recheck
sudo grub-mkconfig -o /boot/grub/grub.cfg我在最开始搜索教程的时候都告诉我应该指定grub-install的--efi-directory=/boot/efi,但是因为我是将ESP分区与Windows共用的,所以正确的应该是--efi-directory=/boot,可是我一直都没有发现!!
sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=grub --recheck
sudo grub-mkconfig -o /boot/grub/grub.cfg于是每次开机都是:
error: unknown filesystem
grub rescure>于是搜索解决方法,便输入
set root=hd2,gpt5 # ESP分区在fdisk -l中的编号/dev/nvme1n1p5
set prefix=(hd2,gpt5)/grub
set cmdline=(hd2,gpt3)/EFI/grub # Linux rootfs在fdisk -l中的编号/dev/nvme1n1p3
insmod normal
normal的确成功进入菜单了,但是发现分辨率不对,且Windows启动后是默认徽标而非主板厂商的OEM图标,然后它告诉我进入系统后应该输入之前的命令重建grub。
果不其然,我刚刚重建了引导,重建重启它还是这样子!!
便看向grub.cfg,感觉并无异常,GUID定位也配置好了,重复折腾几十遍,BIOS也改过,甚至把原来在二号位的硬盘通过拆cpu风扇显卡之类的方法换回了一号位,重新启动仍然如此,实在令人不解。
在grub rescue中执行set,提示:
root=hd2,gpt4
prefix=(hd2,gpt4)/grub
cmdline=(hd2,gpt5)/EFI/grub差十万八千里呢!!!
看起来它根本没有听我的cfg,好怪哦。
喂给GPT,GPT告诉我我的EFI分区在/boot/efi中,检查一下目录结构是否正确,您猜怎么着?
$ ls /boot/EFI #fat32分区不分大小写
Boot Microsoft EFI
$ cd /boot/efi/efi
grub
$ cd grub
$ ls
grubx64.efi我立即意识到目录结构有误,grub识别不到efi文件了,正常来说grub文件夹应该和Microsoft Boot之类的平级才对,这显然是前面的efi-directory指定错误了,于是删除了/boot中grub有关的文件夹重建引导,这时候grub正常运行!!!
似乎被某教程误导了((( 我的boot挂载位置可能不太一样🤔
整了两天的系统盘迁移实在是煎熬,下次再也不装双系统了((
当然甚至有可能我还忘记了一些坑w=w
前往以下网站,不保证安全性哦喵~Arch Linux启动引导修复纸鹿摸鱼处前往以下网站,不保证安全性哦喵~
Windows 系统无法启动(错误代码:0xc000000e)的修复CSDN前往以下网站,不保证安全性哦喵~
修复 GRUB unknown filesystem error知乎前往以下网站,不保证安全性哦喵~
使用 dd 克隆磁盘Linux-Console
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。