Win 10 UEFI + Ubuntu 18.04 UEFI 双系统 (by quqi99)

版权声明:本文为博主原创文章,如需转载,请注明出处! https://blog.csdn.net/quqi99/article/details/82466639

问题

本人昨天买了一块SSD, 结果后来发现原来这块SSD存在硬件质量问题, 造成了软件上的种种诡异问题, 如U盘时而识别时而不识别, 如触摸屏左键时而抽风, 如ghost安装win10时几乎到100%的进度时忽然来一个无响应, 重启系统后出现了”To interrupt normal start up, press the blue ThinkVantage button.”, 此时键盘无反应, 既进不了系统, 也进不了BIOS. 拨CMOS电源也无效. 最后发现是这块SSD有质量问题. 估计是SSD有控制器主要是软件吧, 控制器软件有bug导致运行ghost这种软件时也能导致硬件挂住.
也正是因为这个问题吧, 七搞八搞, 一不小心在重试的过程中将之前的一块linux分区误删了, 于是之前打算的迁移双系统的想法泡汤(当然, 那些通过分区助手或者ghost来迁移分区的网上文章照着做没一个是成功的).
这样, 有机会事隔多年再一次重装双系统的机会, 但是发现世道变了, 之前百试不爽的方法现在行不通了. 后经查证, 主要原因是ubuntu 18.04开始默认采用UEFI, 而win10默认仍然是MBR. 这样会导致一系列的问题, 如报错: grub-efi-amd64-signed failed to install 18.04, 统一采用UEFI安装.

BIOS设置

在BIOS中将Boot Mode设置为UEFI Only, 如果有Secure Boot选项还要disable它(不做这一步可能会造成按F12键之后无法找到U盘)
注: 改成UEFI only之后, 运行双系统, 四系统都没问题, 但后来进不了U盘的livecd, 报: couldn’t get UEFI db list, 所以只得改回Both, 但UEFI优先.

安装win10

  • 下载大白菜UEFI专版 - http://www.bigbaicai.com/download.html?down2
  • 下载win10 ghost - axel -n 10 http://xz.win10cjb.com/18.5/win10_64/DEEP_Win10x64_201805.rar
  • 制作大白菜启动U盘, 如果界面上有UEFI字眼就点上(不记得了, 有就点上), 还要注意一点, 记得点里面的格式转换, 将FAT32格式(HDD-FAT32)转换成NTFS(HDD-NTFS)转换, 否则HDD-FAT32格式不能拷贝大于4G的ghost文件哦,
  • 按F12选U盘启动进入大白菜后, 用DiskGenius工具重新分区, 必须将BIOS+MBR格式转UEFI+GPT格式. 分区表格式为GUID而不是MBR, window上管EFI分区叫ESP/MSR分区
  • 注意, 不要修改推荐的卷标, 这个卷就是指向的ESP/MSR分区.

安装win10后

安装win10后需要将禁用掉快速启动, 否则会造成按F12无法选择U盘启动. 菜单路径为: “设置 -> 系统 -> 电源与睡眠 -> 其他电源设置 -> 选择电源按钮的功能 -> 更改当前不可用的设置 -> 启动快速启动”

安装ubuntu 18.04

像安装win10一样, 一样要注意重要一点, 需创建大概300M左右的UEF分区, 另外, 还可以创建一个根分区和一个备份文件用的bak分区.
注意, windows非常霸道, 它是总修改bios里的启动顺序, 将它的”Windows boot Manager”放在”ubuntu grub”的前面, 可以在bios里锁定启动顺序

安装win7

win7若没有sata的驱动, 所以得先改回IDE, 装完win7之后再改回AHCI, 否则也容易挂在启动界面不动了.
注: 我未遇到以上问题, 可能因为我装的win7并不是原版的, 已经带了sata驱动

加装SSD

如果加装了SSD之后呢? 那得注意:

  • 装win10时同样需要进大白菜或老毛桃后用DiskGenius在SSD上划分ESP/MSR分区
  • 装ubuntu时, 分区处也要创建EFI分区, 同时grub设置安装在SSD上, 相当于: grub-install /dev/sdX.
  • bios里选择哪块硬盘启动. 其实在SSD上安装grub后, 这个grub会连HDD上原先的win10与ubuntu一起放在启动列表里. 注意, windows非常霸道, 它是总修改bios里的启动顺序, 将它的”Windows boot Manager”放在”ubuntu grub”的前面, 可以在bios里锁定启动顺序
  • 有时候需要对ssd优化, 例如不要将swap分区放在ssd以延长寿命, 如更改i/o调度策略为noop, 如使用bcache

问题

装完之后进入win10发现thinkpad小红点左键失灵, 再切换进ubuntu发现小红点左键正常(实际上, 5次大概有一次有问题, 只是登录界面左键与右键似乎混乱了, 登录之后就正常了. 再换PE进系统发现小红点左键依然有问题. 所以基本断定和硬件没有关系, 应该是win10上的小红点驱动有问题.
但搜索了很多帖子, 没一个能解决问题的, 联想的小红点win10驱动做得太烂了. 所以决定回到win7, 回到win7之后该问题解决. 另外, PE回到win7的过程中不会伤害之前SSD上安装的ubuntu系统, 也不会伤害原HDD里的双系统.

数据迁移

现在在笔记本x220t上装了win10, 也装了ubuntu 18.04, 但是如何将工作机t440p的根分区迁移到x220t的根分区呢? 因为我们已经在x220t上安装了ubuntu 18.04, 这样省去了采用命令划分EFI分区, 以及最后填充EFI分区的步骤. 现在将精力集中在如何快速迁移根分区上.

  • 目的机x220t因为有写操作, 故要以livecd启动, 启动ssh server, 并将根分区加载到/mnt
sudo -i
apt install openssh-server
passwd
echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
service ssh restart
fdisk -l
mount /dev/sdb4 /mnt

# backup 3 files
/mnt/boot/grub/grub.cfg
/mnt/etc/hostname
/mnt/etc/fstab
  • 源机t440p只有读操作故不需要以livecd启动. 但如果以livecd启动的话, 未加载根分区所依赖的分区如/bak分区, 此时如果又没挂载/bak分区的话, rsync命令迁移一些指向/bak分区的软链时会报错退出. 人工删除该软链重新运行即可. 且需要注意 rsync命令中的/mnt/后应该有/, 否则会将mnt目录迁移到根分区的mnt目录下.
sudo -i
fdisk -l
mount /dev/sda9 /mnt

# rsync will now copy all files, directories, permissions and owners over to the destination machine. 
# It also skips all files and directories that are not on the root filesystem, like /dev/, /sys/, /proc/. 
# If there are filesystems that are mounted separately on the source machine and your want those copied too, use rsync again on those mountpoints too.
# NOT USE livecd
rsync -xavP --numeric-ids --exclude='tmp' --exclude='/nas' /mnt/ [email protected]:/mnt/
# USE livecd
rsync -xavP --numeric-ids --exclude='tmp' / [email protected]:/mnt/

# then restore above 3 files
/mnt/boot/grub/grub.cfg
/mnt/etc/hostname
/mnt/etc/fstab
  • 可选, 如果之前没有备份/mnt/boot/grub/grub.cfg, 这时也可以重新生成. 更新grub, 此时会报”canot find EFI directory”, 这样会导致这时生成grub时无法找到原HDD中的双系统, 不要紧, 只要找到目前SSD中的双系统即可. 呆会下一步再运行一下grub命令即可解决
mount /dev/sdb8 /mnts
for d in dev sys proc; do mount --bind /$d /mnt/$d; done
chroot /mnt/ grub-install /dev/sdb   # canot find EFI directory
chroot /mnt/ update-grub
  • 可选, 如果之前没有备份/mnt/etc/fstab, 这时也可以重新生成. 修复fstab, 之前运行上述迁移命令前忘了备份x220t上的fstab系统, 导致它被覆盖, OK, 我们修复它.
blkid
e2label /dev/sdb8 "ROOT_SSD"
tee "/mnt/etc/fstab" <<EOF
#UUID can be found via blkid command
#LABEL=boot /boot ext2 sync 0 2
#UUID=735b3be3-779c-4d21-a944-b033225f3ab4 none   swap    sw      0       0
#LABEL=SWAP none swap sw 0 0
UUID=9401-D2EA /boot/efi vfat defaults 0 2
LABEL=ROOT_SSD / ext4 errors=remount-ro 0 1
EOF
  • 这时重启系统, 就可以以grub选择启动SSD上的双系统了, 如果还想把HDD的原有的双系统也加到grub的话, 那进ubuntu系统后再执行一次update-grub命令即可.
  • 这种迁移方式效果非常好, 一个rsync命令搞定, 各种工作软件不需要再重装了. 呵呵

bcache

sudo apt install bcache-tools
# sdb is ssd, sda is hdd
# bcache will refuse to instantiate if it looks like a filesystem already exists on the device
sudo umount /data
sudo umount /bak
sudo wipefs -a /dev/sdb5
sudo wipefs -a /dev/sda5
# creating the bcache, --discard flag is for TRIM
sudo make-bcache -C /dev/sdb5 -B /dev/sda5 --block 4k --discard --writeback
# creae and mount the filesystem
sudo mkfs.ext4 /dev/bcache0
sudo mkdir -p /bak

# remember to comment /bak and /data as well, or it will throw: Welcome to emergency mode
vi /etc/fstab
#UUID=85d5095b-4288-4cc3-8ac7-aae3ed8e872c /bak            ext4    defaults        0       2
#UUID=e246b3d0-6905-4602-a3ae-2f2162f9871f /data           ext4    defaults        0       2
/dev/bcache0 /bak           ext4    defaults        0       2

# other commands
ls -la /sys/fs/bcache/
umount /bak
echo 1 /sys/block/bcache0/bcache/stop
echo f3e2ac40-5dc4-4e28-880c-4bbb6cd415e3 /sys/block/bcache0/bcache/detach
lsblk
cat /sys/block/bcache0/bcache/state
cat /sys/block/bcache0/bcache/cache_mode
cat /sys/block/bcache0/bcache/dirty_data
bcache-super-show /dev/sda5
bcache-super-show /dev/sdb5

恢复bak分区

bak分区存放数据, 由bcache加速

rsync -xavP --numeric-ids --exclude='images' /bak/ root@192.168.99.128:/bak/

调整分区

一个分区不够用时, 可以使用gpartd合并相邻的空闲分区.注意一点, 要合并的分区必须是umount状态时才能合并.

SSD优化

# disable scanning for btrfs filesystems when boot
sudo apt-get purge btrfs-tools
sudo update-initramfs -ukall

# enable TRIM feature by adding discard option
# what's TRIM - https://blog.csdn.net/quqi99/article/details/50963308
# the option noatime is used to disable access time for a file
sudo hdparm -I /dev/sdb |grep TRIM
vi /etc/fstab
LABEL=ROOT_SSD /               ext4    noatime,discard,errors=remount-ro 0       1
sudo mount -o remount /dev/sdb8
sudo mount |grep sdb8 |grep discard

# Try not to use swap space unless it's running out of memory.
echo 1 > /proc/sys/vm/swappiness

# avoid visiting ssd by using ramdisk for /tmp instead of tmpfs
vim /etc/fstab
tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
tmpfs /var/tmp tmpfs defaults,noatime,mode=1777 0 0
tmpfs /var/log tmpfs defaults,noatime,mode=1777 0 0
sudo mount -o remount /

# Set chrome to use ramdisk cache
cd ~/.cache/google-chrome/Default
rm -rf Cache 
sudo ln -s /tmp Cache 
rm -rf Media\ Cache/
sudo ln -s /tmp Media\ Cache

# Use noop for I/O elevator
cat /sys/block/sda/queue/scheduler
sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="elevator=noop"
sudo update-grub

# Test SSD speed
$ sudo hdparm -Tt /dev/sdb
/dev/sdb:
 Timing cached reads:   9128 MB in  2.00 seconds = 4569.28 MB/sec
 Timing buffered disk reads: 818 MB in  3.01 seconds = 272.07 MB/sec

# Make sure 4K align
$ sudo fdisk -lu |grep sdb |grep sectors
Disk /dev/sdb: 232.9 GiB, 250059350016 bytes, 488397168 sectors

# Health check
$ sudo smartctl -s on -a /dev/sdb |grep PASSED
SMART overall-health self-assessment test result: PASSED

猜你喜欢

转载自blog.csdn.net/quqi99/article/details/82466639
今日推荐