问题

本人昨天买了一块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 (20210321更新,注:目前已没有UEFI专版,下载普通版即可。使用大白菜一般只能通过ghost iso安装,选择msdn iso原版时总是说无法选择iso,原版iso可以通过ultraiso写入usb即可。当然大白菜也提供了PE工具箱)
  • 下载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='/nas' --exclude='/bak' --exclude='/tmp' --exclude='/EFI' --exclude='/media' --exclude='/mnt'  / root@192.168.99.128:/mnt/
# USE livecd, use '/mnt/
rsync -xavP --numeric-ids --exclude='tmp' / root@192.168.99.128:/mnt/
rsync -xavP --numeric-ids --exclude='/nas' --exclude='/bak' --exclude='/tmp' --exclude='/EFI' --exclude='/media' --exclude='/mnt'  /mnt/ root@192.168.99.128:/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
lsblk#其他, 测试虚机中ceph盘的性能
The IO path is:
VM -> RBD -> compute node -> network -> OSD(primary + 2 replicas) -> bcache (nvme + hdd)Stage 1, exclude VM, check IO performance on RBD directly
Create a RBD in cinder-ceph pool and run rbd bench to check IOPS
rbd create cinder-ceph/canonical-test-rbd --size 20G
rbd bench cinder-ceph/canonical-test-rbd --io-size=4K --io-threads=1 --io-total=10G --io-pattern=rand --io-type=write
rbd bench cinder-ceph/canonical-test-rbd --io-size=4K --io-threads=1 --io-total=10G --io-pattern=rand --io-type=read
rbd bench cinder-ceph/canonical-test-rbd --io-size=4M --io-threads=1 --io-total=10G --io-pattern=rand --io-type=write
rbd bench cinder-ceph/canonical-test-rbd --io-size=4M --io-threads=1 --io-total=10G --io-pattern=rand --io-type=read
rbd rm cinder-ceph/canonical-test-rbdStage 2, check network between compute node and the nodes which store test RBD’s primary or replicas
This can be done by iperfStage 3, IO performance on OSD nodes hold the RBD’s primary and 2 replicas
We can not test IO performance on OSD devices directly, so need to find a way to test bcache performance on OSD node, we can use /var/lib/virt/image as test
We can possibly use this folder /var/lib/virt/images to verify IO performance, but there is ext4 built on this bcache, so file system cache could affect a bit, but we should be able to roughly see the overall performance
dd if=/dev/zero of=/var/lib/virt/images/fiotest-image bs=1M count=10240
fio --name=fiotest --rw=randwrite --bs=4k --runtime=30 --ioengine=libaio --iodepth=128 --numjobs=1 --filename=/var/lib/virt/images/canonical-fiotest-image --direct=1 --sync=1 --group_reporting --time_based=1 --eta-newline 1
fio --name=fiotest --rw=randread --bs=4k --runtime=30 --ioengine=libaio --iodepth=128 --numjobs=1 --filename=/var/lib/virt/images/canonical-fiotest-image --direct=1 --sync=1 --group_reporting --time_based=1 --eta-newline 1
fio --name=fiotest --rw=randwrite --bs=4m --runtime=30 --ioengine=libaio --iodepth=128 --numjobs=1 --filename=/var/lib/virt/images/canonical-fiotest-image --direct=1 --sync=1 --group_reporting --time_based=1 --eta-newline 1
fio --name=fiotest --rw=randread --bs=4m --runtime=30 --ioengine=libaio --iodepth=128 --numjobs=1 --filename=/var/lib/virt/images/canonical-fiotest-image --direct=1 --sync=1 --group_reporting --time_based=1 --eta-newline 1
rm -f /var/lib/virt/images/fiotest-image

两个参数:

  • sequential_cutoff默认为4k, 就是大于4k的就是绕开NVME直接往HDD写, 为0就是disable这个特性。所以这个要设置为0, 不然IO性能会很差。
  • 另外bcache的cache_available_percent(/sys/block/bcache0/bcache/cache/cache_available_percent)来看bacache的ssd/cache是不是被写满了,被写满了IO(没写时是100,降到30就差不多快满了)会直接写backing HDD,这样IO会很慢。
while true; do echo `date`; cat /sys/block/bcache0/bcache/cache/cache_available_percent; cat /sys/block/bcache0/bcache/dirty_data; cat /sys/block/bcache0/bcache/writeback_rate; sleep 5; done;
#!/bin/sh
# comes dongdong's patch - https://lkml.org/lkml/2021/1/8/110
while true; do echo "`date +%s`, `cat
/sys/block/bcache0/bcache/dirty_data`, `cat
/sys/block/bcache0/bcache/cache/cache_available_percent`, `cat
/sys/block/bcache0/bcache/writeback_rate`" >> $1; sleep 5; done;

恢复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/secTiming 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

20200808更新

为什么新电脑think x1 yoga这次又要安装双系统,那是因为win10上的cmder似乎丢失键盘按键, 见:https://github.com/cmderdev/cmder/issues/258
与: https://blog.csdn.net/quqi99/article/details/105598417
需关闭win10上的硬盘加密功能:

manage-bde -status
manage-bde -?
manage-bde -off c:
manage-bde -off d:

另外,用ubuntu上的Startup Disk Creation创建u盘启动盘时总不好使,后来证明是U盘质量问题.
目前ubuntu 20.4还遇到一个尚未解决的问题,锁屏时敲密码hang在那儿,日志似乎是:

Aug  8 18:34:03 x1 gsd-power[2533]: Error setting property 'PowerSaveMode' on interface org.gnome.Mutter.DisplayConfig: Timeout was reached (g-io-error-quark, 24)

20210321更新 - 安装工控机

今天买了一个典籍的工控机,安装win10时遇到如下问题:

  • 正常情况是按F2进BIOS
  • 但使用大白菜通过Ghost安装一个win10之后,无法进入BIOS
  • 在win10中禁用快速启动后仍然无法进入BIOS
  • 原来典籍现在默认的是UEFI而不是BIOS,win10对BIOS和UEFI都做了手脚,对于BIOS是禁用快速启动可按F2进BIOS,但对于win10是启动win10后再按shift不动再点击restart,这样再进入UEFI (也可在启动win10后在setting中搜索UEFI进入)。那问题来了,BIOS是可以设置来电启动的,现在使用UEFI如何设置此功能呢?
  • 如果删除win10之后,就再也没有键进入UEFI了,这时可以使用F11来选择usb或者进入UEFI
  • 从msdn下载的iso不是ghost,可通过UltraISO写入U盘中。密钥可通过skms + slmgr注册. 我们这里使用原版的iso (只是通过大白菜分区了)
  • 但是在安装win10选择分区时,报:windows canot be installed to this disk, the selected disk is of the GPT partiton style, 也许是因为用大白菜分区为GPT的原因吗?
  • 于是进UEFI将改成’UEFI only",但这会造成无法识别启动U盘,只好将"Boot option filter"又改回"UEFI and Legacy",但只是将Storage改为’UEFI only", 但问题依旧。
  • 然后在win10分区的界面按"shift + f10", 输入diskpart, 然后再输入’list disk’, ‘select disk 0’, ‘clean’, 'convert mbr’这样会将之前大白菜建的GPT分区全部删除再转化成MBR分区。
  • 这样就用msdn原版iso安装win10成功了。
  • 区域设置成US,这样microsoft store不会闪退(还不能用的话可以reset, 右键点击开始按钮>运行>输入wsreset回车,等待弹出的黑色窗口消失后自动打开Microsoft Store再进行使用),同时也可以安装Your Phone
  • 重置网络 - netsh int ip reset && netsh winsock reset
  • hyper-v下安装android-x86或Bliss OS(更好), 它不是anroid模拟器,而是基于x86的android

20210322更新 - Surface Pro3如何进入USB启动盘

对于Surface Pro3进入UEFI的方法是,关机,插USB启动盘,按住音量+键再按电源键,看到UEFI界面后松音量键,在UEFI中关闭可信计算,将启动顺序设置成"USB -> SSD",这样再Exit UEFI重启即可进入USB启动盘。但是实测:

  • 大白菜制作的PE + Ghost启动盘可以进入PE (UEFI格式)
  • UltraISO制作的MSDN ISO启动盘无法进入 (MBR格式)
    原因是UltraISO制作的是MBR格式,改为微软官方的MediaCreationTool20H2工具制作usb启动盘就OK了(不需要事先下载镜像,它会通过网络自动下载,速度还可以)。
    要将win10 1909升级到2004的话,直接点击usb启动盘或者ISO中中的setup.exe自动升级,升级要注意一点,之前的安装就应该采用中文版的,现在usb里也得是中文版,这样升级之前个人数据和应用数据才不会丢。否则,语言不同只能将个人数据留下来。
    使用MediaCreationTool20H2是不需要事先下载ISO的,当然如果一定要下载,下面有一个迅雷的链接,是win10 2004版 (包括home, pro等):
ed2k://|file|cn_windows_10_consumer_editions_version_2004_updated_may_2020_x64_dvd_5a83cf4e.iso|5260658688|7B09EFFC08DD0FBF1D8A5558DA8445F5|/
 有时候用PE工具制USB启动盘(当然这种方式是不需要的)使用NTFS模式是为了避免拷贝大于4G的ISO文件,ISO文件如果采用解压再拷贝的话可以解除这个限制,直接使用FAT32格式。

优化win10

1, 关闭安全,搜索"defen"打开windows安全中心,点"病毒与防护->管理设置"关闭所有的安全选项。然后搜索"services.msc"禁用"Security Center"服务。
2, 关闭IPv6, 禁用"IPHelper"服务.
3, 禁用"Windows Search"服务, 因为不会在这台电脑上search太多.
4, 修改电源计划为高性能模式,右击开始按钮,点击“电源选项”→“其他电源选项”,将首选计划修改为”高性能“。且将“性能和能量”项改为“最佳性能”。
5, 禁用Cortana, 搜索"gpedit.msc", 展开“计算机配置—管理模板—Windows 组件—搜索”, 找到“允许使用 Cortana”,右键选择“编辑”, 需重启电脑。
6, 禁用"Windows Update"服务。
7, 禁用OneDrive,搜索"gpedit.msc", 展开“计算机配置—管理模板—OneDrive"下列的一系列项。
8, 但那样设置之后,发生有一个叫Antimalware的服务占用CPU与内存都非常高,注册表中禁用:计算机管理->管理模板->Windows组件 >Windows Defender防病毒->实时保护->不论何时启用实时保护,都会启用进程扫描。 这样仍不生效,继续禁用:计算机管理->管理模板->Windows组件 >Windows Defender防病毒->关闭Microsoft Defender防病毒|关闭例程更新。同时msconfig禁用与安全相关的服务以非microsoft的服务。但还是不行,最后以管理员运行powershell然后运行(REG ADD "hklm\software\policies\microsoft\windows defender" /v DisableAntiSpyware /t REG_DWORD /d 1 /f)解决,它相当于在regedit下在HKEY_LOCAL_MACHINE/SOFTWARE/Policies/Microsoft/Windows Defender路径下添加了名为DisableAntiSpyware的DWORD32=1
9, win10设置系统默认编码为UTF-810, 打开Hyper-v, NFS, 虚拟机平台, 适用于Linux的Windows子系统,容器,Telent客户端,TFTP客户端等7个特性,在设置的程序里添加这些特性即可。
11, win10打开远程桌面, Ubuntu上使用Remmina连接RDP桌面。

配置Hyper-v

1, 新建虚拟交换机WAN(外部,连接第一块网卡, 为避免失去RDP连接应勾选允许管理操作系统共享此网络配置器)
2, 新建虚拟交换机LAN(内部,连接第二块网卡, 为避免失去RDP连接应勾选允许管理操作系统共享此网络配置器), 此时,win10的网络连接中,会多出三个虚拟网卡:vEthernet (Default Switch),vEthernet (WAN)和vEthernet (LAN)。
3, img格式转成vhdx格式(注:gz需先解压)

gunzip -d openwrt-gdq-v8-1[2021]-x86-64-generic-squashfs-uefi.img.gz
qemu-img convert openwrt-gdq-v8-1[2021]-x86-64-generic-squashfs-uefi.img -O vhdx -o subformat=dynamic router2021v8UEFI.vhdx

3, 新建虚机eSirLEDE, 第二代(下载的是EFI固件),1024M内存,使用existing eSirLEDE.vhd, 注:此时暂时不选择网络
4, 设置网络,先添加WAN再添加LAN, 顺序很重要,这样,WAN名为eth0,LAN名为eth1
5, 设置虚机,在安全性tab中取消“启用安全启动”(默认就是取消的),并设置始终自动启动此虚拟机。
6, 启动虚机后,编辑(vi etc/config/network)调整wan/lan与eth0/eth1的关系(将lan处的网络改成eth1, wan处的网卡改成eth0),修改lan的IP为:192.168.99.1, 然后用passwd root设置密码。
7, 敲入reboot重启虚机后,虚机里面的br-lan的IP将为192.168.99.1(它连的是eth1). 将电脑连向这第二块网卡(eth0)设置一个IP之后就可以进GUI界面去设置了

20210323更新 - 存储的安装

我们并不想使用黑群晖,只是想简单的将USB存储挂进win10或者OpenWrt虚机里然后通过rsync同步。
1, 若将USB存储挂载到虚机,需要先在win10下将该盘脱机。然后hyper-v里添加SCSI控制器就可以添加这块脱机的硬盘了

diskpart
list disk
select disk 1
offline disk
#list partition
#select partiion X
#active

但是将磁盘设置为offline之后,用下列命令active时却报:ACTIVE命令只能用于固定MBR磁盘

list partition
select partiion X
active

但在设置的磁盘管理处在磁盘(而非右侧的分区)点右键点”联机“就回来了。
2, 前提是win10能认出这个USB存储,由于之前移动硬盘用Ext4分区了,现在win10并不能挂载它。经过试用,唯一靠谱的是一个收费软件,叫Paragon ExtFS,见: https://www.jianshu.com/p/c9aeed724fb3
3, 虚机添加了硬盘之后,若硬盘消失,虚机会启动失败。
4, win10上能成功运行的nfs server开源软件只有haneWIN,但它和Paragon ExtFS不能结合,必须得将硬盘从Ext4转回NTFS。
5, 但通过虚机用硬盘提供nfs后,在其他机器通过(sudo mount -t nfs 192.168.99.1:/mnt/sdb1 /mnt/win/sdb1)时报错"mount(2) system call failed: No error information"。

mount(2) system call failed: No error information.
fsck.ext4 -y /dev/sdb2

之后如果在http://192.168.99.1/cgi-bin/luci/admin/nas/nfs页只mount /mnt会报下列错,应该mount /mnt/sdb1

mount.nfs: access denied by server while mounting 192.168.99.1:/mnt/sdb1

且在使用rsync时对中文处理不友好(deleting doc/me/xxx/#344#273#262#350#243#201/), 网上说可以通过“rsync -avzPu --iconv=“GBK,UTF-8” --size-only”解决。

/usr/bin/rsync -avztur --progress --delete --exclude 'windisk' /mnt/nas /mnt/sdb1
/usr/bin/rsync -avztur --progress --delete --exclude 'windisk' admin@192.168.2.103:/share/HDA_DATA/Public/ /mnt/sdb1

6, 另外,通过虚机使用USB硬盘,在USB抽拨之后,openwrt中原sda变成sdb了,导致usb原来的sdb无法加载。所以似乎在虚机里使用容易插拨的USB存储并不是一个好的选择。

附 - win10上使用haneWIN
20210829更新:haneWIN速度只在太慢了(只有1M每秒),现在换成使用windows共享文件夹也就是samba的模式(速度大概在15M每秒 )

# 在win10中在“电脑->管理->用户”创建一个名为nfs的本地用户,然后在要创建共享文件夹的目录上点击右键创建共享文件夹
# use share file instead of hanewin, hanewin is too slow  ( fuser -k /mnt/win_share/ && umount /mnt/win_share )
# sudo mount -t cifs -o username=nfs,password=password //win/win_share /mnt/tmp/
#/mnt/win_share    -fstype=cifs,rw,username=nfs,password=password,vers=1.0,file_mode=0777,dir_mode=0777 ://win/win_share
/mnt/win_share    -fstype=cifs,rw,username=nfs,password=password,file_mode=0777,dir_mode=0777 ://win/win_share
/mnt/win_bak    -fstype=cifs,rw,username=nfs,password=password,file_mode=0777,dir_mode=0777 ://win/win_bak

下面是 win10使用haneWIN的方法:
现在改用在win10上通过Paragon ExtFS + haneWIN (NFS Server)来提供共享存储(ubuntu要想访问需设置utf编码):
下载(https://r.hanewin.net/nfs1258.exe)安装后需以管理员打开(否则,配置项全是灰的)在设置一个exports (D:\ -alldirs -name:win_bak -public), 然后restart它即可, 它默认使用的就是utf-8编码。
ubuntu上用nfs client连接它:

D:\ -alldirs -name:win_bak -public -maproot:0
G:\ -alldirs -name:win_share -public -maproot:0
showmount -e 192.168.2.164
sudo mount -t nfs win:/win_bak  /mnt/win_bak -o vers=3 -o nolock
sudo mount -t nfs win:/win_share  /mnt/win_share -o vers=3 -o nolock

在"高级安全Windows Defender防火墙打开了111,1058,2049三个端口,但仍然报错“mount.nfs: access denied by server while mounting”。原因是它不能从Paragon ExtFS读取EXT4的文件,必须得将硬盘格式切换回NTFS啊。

NTFS盘挂载到ubuntu下遇到read-only问题:

sudo e2fsck /dev/sdd
sudo hdparm -r0 /dev/sdd  #close write-protected
sudo ntfsfix /dev/sdd1
sudo mount -o rw /dev/sdd1 /media/hua/win/
sudo mount -o remount,rw /dev/sdd1 /media/hua/win/

在http://192.168.99.1/cgi-bin/luci/admin/nas/nfs使用nfs client挂载时报missing错误是因为输入框里没有填东西(只是提示误以为是默认值)。挂载了3个目录:

192.168.2.164:/win_bak/* -> /mnt/win_bak
192.168.2.164:/win_share/* -> /mnt/win_share
192.168.2.103:/Public -> /mnt/nas

或将上面的全删除就能启动了,然后再编辑:

root@OpenWrt:~# cat /etc/config/nfs config mountoption enabled '1'option target '/mnt/win_bak'option options 'rw,nolock'option source 'win:/win_bak'option delay '1'config mountoption enabled '1'option target '/mnt/win_share'option options 'rw.nolock'option source 'win:/win_share'option delay '3'config mountoption enabled '1'option options 'rw,nolock'option delay '5'option source 'nas:/Public'option target '/nas'
  1. 数据统一从nas进,在路由器上将nas往win_bak里通过rsync同步 ( rsync -avztur --progress --delete --exclude ‘.Trash-1000’ /mnt/nas/ /mnt/win_bak , 可以先不带–delete测试)
  2. win_share在所有机器中共享,方便同步数据

但此时又报下列错, 解决这个问题的关键是在haneWIN中添加’-maproot:0’参数

root@OpenWrt:~# mkdir /mnt/win_bak/tmp
mkdir: can't create directory '/mnt/win_bak/tmp': Permission denied

同时安装openssh, 在"setting -> application -> optional function"安装openssh server即可.
ssh安装好之后,可以使用基于ssh的tftp了,在"电脑->管理->用户"中创建一个本地用户,之后如何将用户权限只限定在某个目录呢?答案是编辑隐藏文件(在view菜单中显示隐藏文件)(C:\ProgramData\ssh\sshd_config),同时要编辑这个文件先在这个文件的属性中将权限改成可编辑,然后添加:

Subsystem    sftp    sftp-server.exe internal-sftp
...
Match User ftpuserChrootDirectory G:\www\sftp# Disable tunneling, authentication agent, TCP and X11 forwarding.AllowAgentForwarding noAllowTcpForwarding noX11Forwarding noPermitTTY noPermitTunnel noForceCommand internal-sftp

最后,在服务中重启openssh即可,然后就可以通过tftp命令或者winscp来拷贝文件了.若要在外网访问的话记得添加端口映射.
注意:我之前一直失败,原因是将G\www\sftp写错成了G:\www\tftp,非常难查.

20210323更新 - 裸机安装

还有一个大问题是,在虚机里运行OpenWrt时,其他机器连接时经常会从br-lan的dhcp拿不到IP,而人工设置了网络又没问题。这块不是很稳定。

  1. 将OpenWRT直接安装裸机的方法,即需要将img的raw格式写到SSD(DiskImage GUI或physdiskwrite CLI - physdiskwrite -u xx.img均能写盘),将DiskImage和img拷到PE盘上,启动PE后直接打开DiskImage选择img写到SSD即可。我们使用physdiskwrite,写前用PE先将SSD的分区都删了,记住不要新建分区,直接cmd去raw镜像目录运行‘physdiskwrite -u xx.img’, 选0分区(即ssd分区),再按y写镜像即可。注意:如果bios(对于zero工控机是按Delete键进bios)里如果设置的是UEFI only即必须使用UEFI镜像,否则系统会反复重启。装完之后,进系统设置/etc/config/network即可(参考下面的)。
  2. 然后就是设置/etc/config/network了,如果有多个网卡可以都放到br-lan里
config interface 'lan'option type 'bridge'option proto 'static'option netmask '255.255.255.0'option _orig_ifname 'eth0'option _orig_bridge 'true'option ifname 'eth0 eth1 eth2 eth3 eth4'option ipaddr '192.168.99.1'option ip6assign '64'
config interface 'wan'option proto 'dhcp'option _orig_ifname 'eth1'option _orig_bridge 'false'option ifname 'eth5'

第一级路由器(192.168.2.0/24)到第二级路由器(192.168.99.0/24):

# cat /etc/rc.local
route add -net 192.168.99.0 netmask 255.255.255.0 gw 192.168.2.47
exit 0

ssh设置:

mkdir ~/.ssh
dropbearkey -t rsa -f ~/.ssh/id_rsa
dropbearkey -y -f ~/.ssh/id_rsa |sed -n 2p > ~/.ssh/id_rsa.pub
# https://community.onion.io/topic/2538/resolved-ssh-from-omega-to-linux-server-without-password/9
ln -s ~/.ssh/id_rsa ~/.ssh/id_dropbear
chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys && chmod 644 ~/.ssh/authorized_keys
ssh admin@192.168.2.103 "tee -a /root/.ssh/authorized_keys" < ~/.ssh/id_rsa.pub
#/usr/bin/rsync -avztur --progress --delete --exclude 'windisk' admin@192.168.2.103:/share/HDA_DATA/Public/ /mnt/sdb1

20210716 Update - sshfs + autofs + sshpass

cat << EOF | sudo tee /bak/bin/sshpass.sh
#!/bin/bash
sshpass -f /home/hua/.pwd ssh $*
EOF
chmod +x /bak/bin/sshpass.sh
#sshfs -o password_stdin hua@win:G:\share /mnt/win <<< 'your pass'
sshfs -o reconnect,allow_other,follow_symlinks,ssh_command='/bak/bin/sshpass.sh' hua@win:G:\share /mnt/win#autofs
/mnt/win -fstype=fuse,port=22,reconnect,allow_other,follow_symlinks,ssh_command=/bak/bin/sshpass.sh :sshfs\#hua@win\:G:\share#/etc/fstab
sshfs#hua@win:G:\share /mnt/win fuse ssh_command=/bak/bin/sshpass.sh 0 0
sudm mount -a

Win 10 UEFI + Ubuntu 18.04 UEFI 双系统 (by quqi99)相关推荐

  1. Dell Inspiron 3670 安装 Win 10 和 Ubuntu 18.04 双系统,UEFI 启动

    Dell Inspiron 3670 安装 Win 10 和 Ubuntu 18.04 双系统,UEFI 启动 电脑配置(Inspiron 3670-R1847S) BIOS 设置 制作启动盘 安装 ...

  2. win10环境向移动固态硬盘安装Ubuntu 18.04.3 LTS系统(即插即用)

    win10环境向移动固态硬盘安装Ubuntu 18.04.3 LTS系统(即插即用) 一.从官网下载ubuntu18镜像 地址:https://ubuntu.com/download/desktop ...

  3. debian linux 进入单用户模式 修复系统,在单用户模式/紧急模式下启动Ubuntu 18.04/Debian 9系统...

    单用户模式也称为救援模式,还有一个紧急模式,它们是 Linux 系统在关键时刻需要修复的时候采用的故障排除模式,我们将在 Ubuntu 18.04/Debian 9 系统中启用它,救援模式和紧急模式它 ...

  4. nvme固态必须uefi启动吗_【Ubuntu】UEFI安装Windows 10和Ubuntu 18.04双系统(深度爬坑)...

    前言 必须先安装windows.如果先装Ubuntu再装Windows.安装Windows时会覆盖 EFI分区已有的引导,那么Ubuntu的引导就丢了.而先装Windows再装Ubuntu,Ubunt ...

  5. ThinkPad X1 Extreme隐士 Ubuntu 18.04装机双显卡配置解决方法

    0. 双显卡配置 1. ThinkPad X1 Extreme 双显卡配置 集成显卡:Intel Corporation UHD Graphics 630 (Mobile)独立显卡:NVIDIA Co ...

  6. 如何在 Windows 10 的同时安装 Ubuntu 20.04实现双系统

    如何在 Windows 10 的同时安装 Ubuntu 20.04 和双启动 注:本文翻译自How to install Ubuntu 20.04 and dual boot alongside Wi ...

  7. ubantu引导 修改win10_win10 + Ubuntu 20.04 LTS 双系统 引导界面美化

    效果展示 自带引导界面太丑,下了个主题美化一下,效果如下 主题下载地址 安装主题 解压 $ tar xvJf Vimix-1080p.tar.xz 进入解压后的文件夹 $ cd Vimix-1080p ...

  8. 安装WIN10 linux Ubuntu(18.04)双系统

    双系统的安装 win10安装ubuntu的具体步骤 制作系统启动U盘 分区设置 关闭快速启动 安装步骤 win10安装ubuntu的具体步骤 主要分为启动盘的创建,分区设置,安装步骤,和一些我踩到的坑 ...

  9. Windows 7 Ultimate + Ubuntu 12.04 LTS双系统完美走起

    (由于我的双系统已安装.配置完毕,本教程部分截图出自虚拟机安装过程,本机安装会略有不同) 一. 准备软件 Windows 7 Ultimate – 已安装至PC机 Ubuntu 12.04 LTS系统 ...

  10. Windows+Ubuntu 20.04.3 双系统详细教程【含镜像文件和所需工具】

    文章目录 前言 1.工具准备 2.制作启动U盘 第一种分区 第二种分区 3.安装Ubuntu系统 4.效果 前言 不记得这是第几次安装Linux系统了,虽然轻车熟路,但是还是会去看一些教程防止出错,所 ...

最新文章

  1. Oslo团队研发首个形态自适应机器人 | AI日报
  2. 高职扩招有计算机专业吗,高职扩招计算机专业
  3. SDN第三次上机作业
  4. 在windows下架设openssh实现资源共享
  5. 关于编码ansi、GB2312、unicode与utf-8的区别
  6. Python工作记录
  7. splice方法_Array中splice用法
  8. java jxl包_Java开源20个项目,最好别错过,帮助你灵活应对面试师的刁难
  9. 安卓毕业设计- Android计算器
  10. 易洁仓库管理 v3.1.125 网络版 官方
  11. 计算机网络协议名词解析,网络协议名词解释
  12. axio请求获取网络数据
  13. 剧本写作app——Final Draft,帮你创建专业的主流编剧格式!
  14. ospf配置小实验及安全认证
  15. 使用终端模拟器通过wifi连接eclipse
  16. XJOI 9552矩阵游戏(2级1段)
  17. ASP.NET MVC5 使用NPOI导出ExceL 返回浏览器下载
  18. Linux 禁止查看根目录,Linux用户登录之后,不能查看根目录列表(转载+原创)
  19. Apollo详解之定位模块———导航设备硬件基础
  20. matlab海龟交易策略,【策略篇】海龟交易系统使用方法和源码

热门文章

  1. WPF 框架prism代码笔记
  2. Svn分支管理的使用(三)
  3. 怎么彻底删除mysql服务_mysql怎么卸载干净?
  4. 通用印刷体文字识别_印刷体文字识别(汉字)中文符的分割
  5. python图书管理实训报告总结_图书管理系统设计实训报告
  6. 职业生涯规划不会做?首先要知道职引生涯规划!
  7. 【R语言报错解决】—存在非数值型变量,Error in c_max * c_min : non-numeric argument to binary operator,如何在数据导入后转为数值型变量?
  8. ubuntu 搭建 smtp 邮件服务器
  9. php for求合,怎么用PHP for循环求1到100的和
  10. Multisim 10 添加可调电阻