惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hugging Face - Blog
Hugging Face - Blog
宝玉的分享
宝玉的分享
G
Google Developers Blog
T
Tailwind CSS Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
V2EX
V
Visual Studio Blog
博客园 - Franky
S
SegmentFault 最新的问题
Jina AI
Jina AI
爱范儿
爱范儿
The Cloudflare Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
D
DataBreaches.Net
C
Check Point Blog
月光博客
月光博客
P
Proofpoint News Feed
T
The Blog of Author Tim Ferriss
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
MongoDB | Blog
MongoDB | Blog
The GitHub Blog
The GitHub Blog
Y
Y Combinator Blog
Martin Fowler
Martin Fowler

Ariasakaの小窝

Ariasakaの小窝 Ariasakaの小窝 Ariasakaの小窝 Ariasakaの小窝 Ariasakaの小窝 Ariasakaの小窝 Ariasakaの小窝 Ariasakaの小窝 Ariasakaの小窝 Ariasakaの小窝 Ariasakaの小窝 Ariasakaの小窝 Ariasakaの小窝 Ariasakaの小窝 Ariasakaの小窝 Ariasakaの小窝 Ariasakaの小窝 Ariasakaの小窝 Ariasakaの小窝 Ariasakaの小窝 Ariasakaの小窝 Ariasakaの小窝 Ariasakaの小窝 Ariasakaの小窝 Ariasakaの小窝 Ariasakaの小窝 Ariasakaの小窝 Ariasakaの小窝 Ariasakaの小窝 Ariasakaの小窝
Ariasakaの小窝
2024-09-18 · via Ariasakaの小窝

自己有一台日用台式机,硬盘是只有 512 GB 的一块金士顿A2000,实际上容量甚是不足,且读写速度也极为一般,只在2000MB/s左右,若是已占用空间较多的话,甚至只有1200MB/s左右了。

电脑配于2021年底,不过当时觉得512G已经很大了,且预算紧张,毕竟当年的固态硬盘价格并非是现在那么便宜的,便憋屈使用至今。

卖掉了小学时期比赛的机器人,拿到了几百块钱,便想着发挥一点作用,毕竟电脑空间不足,就在pdd花三百多入手了一块 1TB1TB=1024GB 的铠侠 SD10,实在真香啊😋性能简直是暴打老硬盘:

*老硬盘,只以微弱的4k性能优势获胜,原因是腾空了:

既然如此,性能这么好的新硬盘,为何不给系统盘用呢,还可以腾出大量的空间来进行扩容。

超级!踩坑

事情开始变得复杂起来了,跟别人不一样的是,我安装了ArchLinux+Windows11双系统,在双系统的迁移过程中,由于两边系统文件系统互相不兼容,即使是一些第三方解决方案例如DiskGeniusntfs-3g也无法做到很好,于是就造成了超级麻烦的在ArchISO、WinPE、ArchLinux、Windows11和BIOS之间切换

可是讨厌了,接下来便是超级漫长的无数踩坑过程QwQ——

叠甲:由于PE无法连接网络与方便的传输文件,所以在 ArchISOWinPE 下大量采用了拍屏方案,如有不适请谅解!

文件克隆·第一阶段

初尝试·DG硬盘克隆

首先尝试的便是DiskGenius的磁盘克隆功能了,找到一个刻录了WinPE的U盘插入电脑进BIOS改启动项进入PE,然后找到DiskGenius打开,理论上来说,只需要右键硬盘克隆然后按照指引便可完成。

看起来挺顺利的,不幸的是,因为我希望扩容原盘的两个系统的系统盘,但是DG的磁盘扩容功能不支持跟空闲空间隔着 ESP MSRSwap之类的分区的情况进行,好巧不巧,我的Swap分区正好放在了rootfs的后面,而且ESP分区在原盘的最后,于是空闲空间就在SwapESP分区之后了。

为什么就不可以把ESPSwap分区给删掉,这不就可以扩容了么?

那更坏的消息是:DiskGenius直接将ArchLinux创建的ext4分区标记为了损坏分区,似乎是因为ext4支持不完善,总之只要有分区是损坏的,DiskGenius就无法正常进行磁盘扩容和分区调整了,此方法失败。

再尝试·逐分区克隆

还有什么办法呢?

DiskGenius还有一个分区克隆的功能,这个功能更加灵活,支持不依赖文件系统底层结构的文件级克隆 (同时也支持扇区级的克隆),且速度极快,不会产生使用Windows资源管理器直接复制产生的4k读写速度不足的尴尬场面。

于是便可以在新硬盘上面分好想要的分区,然后一对一的克隆ESP Swap之外的分区即可:

为什么中间要留120GB的空闲空间呢?

前面说到,DiskGenius 会将 ArchLinux 创建的 ext4 分区视为 损坏分区,这导致DiskGenius 很难直接操作这些分区,于是只能后续在ArchISO进行分区迁移操作了。

现在便处理好了NTFS分区的文件克隆了,接下来来修复引导!

引导修复·第一阶段

不允许两个 ESP 分区的 BIOS

先尝试修复Windows的引导。

正常来说,创建一个 ESP 分区找到一个引导修复工具就可以解决问题了:

不出意外的话,就出意外了。

重启进入BIOS,见引导列表仅有原盘,然后离之见仍为原系统,遂又进PE,重建之,再重启,仍无。

BOOTICE,求得BCD编辑,实已具。

头痛甚,尝:

TEXT
bcdedit /enum

失败。

实为二ESP分区所混淆,遂删除原盘上的ESP分区。

重名的 Windows Boot Manager 之谜

现在BIOS里面总算出现了新的硬盘名称KIOXIA EXCERIA,已经不是KINGSTON SA200500G了,但是一开机,又出了逝:

太奇怪了,于是进PE反复折腾了一个多小时,最后在BIOS启动项BBS顺序 发现了两个一样的Windows Boot Manager,尝试交换两者,成功启动(甚至退出BIOS时会显示无任何更改

系统盘变 F 盘

成功启动转圈圈,但没完。

进入了锁屏页面,但是发现不断的闪屏,模糊效果出错,输入密码之后系统卡死,Ctrl+Alt+Delete失效,explorer灰屏,打开任务管理器,运行diskmgmt.msc,发现系统盘变为了F盘,导致大多数内容失效。

折腾半天没有头绪,于是用了笨方法:删除掉了原硬盘的所有非Linux分区,此时开机系统盘因为在首位就自动变成C盘了,问题解决。

这样子做的话有 数据安全风险 ,建议不要效仿,不然要是不小心炸了系统盘的话就没有备份了((

文件克隆·第二阶段

烧录小插曲

接下来得想办法把ArchLinux给打开了。

因为我只有一个U盘,所以只能重新下载ArchISO然后覆盖上原来的PE了,本来想用Rufus复制的,结果 Rufus它不行!

遂尝试安装WSL然后dd上去,不出意外的话,又出意外了:

POWERSHELL
PS > sudo wsl --import Ubuntu F:\ F:\install.tar
拒绝访问。
Error code: Wsl/E_ACCESSDENIED

😡😡😡

尝试数次,无效。

遂启动balanaEtcher,烧录成功。

😋

分区克隆

接下来就可以启动ArchISO盘了,在cfdisk中将原来的空闲分区新建一个,然后开始拷贝分区:

BASH
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~

BASH
mount /dev/nvme1n1p6 /mnt
arch-chroot /mnt
mkswap /dev/nvme1n1p7
swapon /dev/nvme1n1p7
mount /dev/nvme1n1p4 /boot

重建/etc/fstab(如果原来默认挂载了Windows下的磁盘的话,得在引导整好之后进系统改fstab

BASH
genfstab / -U > /etc/fstab

重做映像和grub

重装linux内核包以触发mkinitcpio钩子,如果用的是linux-zen之类的同样重装相应包即可:

BASH
pacman -S linux

现在ls /boot就有了linux的内核镜像了。

接下来运行grub修复启动:

先在/etc/default/grub中取消注释或添加GRUB_DISABLE_OS_PROBER=false,然后:

BASH
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub --recheck
grub-mkconfig -o /boot/grub/grub.cfg

现在就可以重启了:

BASH
exit
reboot

接下来在BIOS中修改默认启动项为grub即可看到grub

然后回车就能启动Arch了!!!

先重新挂载Windows下的磁盘,然后重建/etc/fstabGUID格式:

BASH
sudo genfstab -U / > /etc/fstab

你会发现grub里面并没有Windows,且还是英文,所以在进入系统之后再次重建grub就可以了:

BASH
sudo grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub --recheck
sudo grub-mkconfig -o /boot/grub/grub.cfg

EFI Directory的大坑

我在最开始搜索教程的时候都告诉我应该指定grub-install--efi-directory=/boot/efi,但是因为我是将ESP分区与Windows共用的,所以正确的应该是--efi-directory=/boot,可是我一直都没有发现!!

BASH
sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=grub --recheck
sudo grub-mkconfig -o /boot/grub/grub.cfg

于是每次开机都是:

BASH
error: unknown filesystem
grub rescure>

于是搜索解决方法,便输入

BASH
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,提示:

BASH
root=hd2,gpt4
prefix=(hd2,gpt4)/grub
cmdline=(hd2,gpt5)/EFI/grub

差十万八千里呢!!!

看起来它根本没有听我的cfg,好怪哦。

喂给GPTGPT告诉我我的EFI分区在/boot/efi中,检查一下目录结构是否正确,您猜怎么着?

BASH
$ ls /boot/EFI #fat32分区不分大小写
Boot Microsoft EFI
$ cd /boot/efi/efi
grub
$ cd grub
$ ls
grubx64.efi

我立即意识到目录结构有误,grub识别不到efi文件了,正常来说grub文件夹应该和Microsoft Boot之类的平级才对,这显然是前面的efi-directory指定错误了,于是删除了/bootgrub有关的文件夹重建引导,这时候grub正常运行!!!

似乎被某教程误导了((( 我的boot挂载位置可能不太一样🤔

总结

整了两天的系统盘迁移实在是煎熬,下次再也不装双系统了((

当然甚至有可能我还忘记了一些坑w=w

参考资料

前往以下网站,不保证安全性哦喵~Arch Linux启动引导修复纸鹿摸鱼处前往以下网站,不保证安全性哦喵~Windows 系统无法启动(错误代码:0xc000000e)的修复CSDN前往以下网站,不保证安全性哦喵~修复 GRUB unknown filesystem error知乎前往以下网站,不保证安全性哦喵~使用 dd 克隆磁盘Linux-Console