USAGI NOTE|小娜,我要ext4

> U酱收藏了一篇笔记,小兔报告说。
> 主要的内容是:
> 使用Linux虚拟机和Samba,在Windows上读写ext4磁盘的方案。


这是一个硬盘盒子,之前曾经接在Linux主机上,所以是ext4的格式;
现在活性酱想在Windows上读写它,怎么办呢?
ext2fsd之类的方案,有的只支持读取,有的据说会破坏硬盘在Linux上的兼容性

撒,怎么办呢?(x2)

鉴于Samba在千兆交换机上跑出满速的优秀性能,
还有VirtualBox方便的USB筛选器功能
在虚拟机运行时,符合筛选器的USB设备会被直接连接到虚拟机上
不妨试试将ext4硬盘挂载到虚拟机的Linux系统上,
然后再用Samba挂载到本地的方式吧!

清单

  1. VirtualBox,以及相应的Extension Pack (USB3.0支持)
    https://www.virtualbox.org/wiki/Downloads
  2. Alpine,迷你的发行版 (VIRTUAL分类的)
    https://alpinelinux.org/downloads/
  3. usbmount,Y老师从Debian转运出来的包
    https://github.com/k9yyy/usbmount
    作用是当插上USB硬盘时自动挂载到/media/usb0目录里

路线

检查VirtualBox的“仅主机网络”配置,记下网段
(尽量不要自动配置,连网段都不知道在哪有用吗.jpg)

新建虚拟机,版本选择Other Linux (64-bit)

  • 内存=256M,硬盘=512M

创建出来后修改虚拟机设置:

  • 存储→把Alpine镜像挂到光驱上;
  • 网络→网卡1用网络地址转换(NAT)提供Internet连接,网卡2用仅主机(Host-only)网络来提供访问地址;
  • USB设备→启用USB3.0控制器

启动虚拟机,稍等片刻后Alpine就会从光盘启动。
当然我们是打算安装到硬盘上的,
所以输入root,直接空密码登录,然后执行setup-alpine

接下来是填问卷时间!

  • 键盘映射,回答两次us
  • 主机名,随你喜欢吧
  • 网卡配置,eth0对应NAT,回答dhcp
  • eth1对应Host-only,自定一个相应网段的静态地址,
    子网掩码255×3,网关none
  • root密码,随意
  • 时区回答Asia和Shanghai
  • 代理一般为无,NTP没必要,回答none
  • 镜像站可以用21的清华镜像
  • SSH服务默认
  • 硬盘选择sda,类型是sys(系统盘)
  • 最后回答y即可开始安装。

安装成功后提示你reboot,在那之前先强制卸载掉Alpine的ISO文件,否则……

如果想使用自己趁手的SSH客户端的话,现在就去修改sshd_config
PermitRootLogin yes
因为剪贴板不互通,默认的终端字体又不好看,活性酱先改为敬

安装samba服务

apk update
apk add samba

用喜欢的方式把usbmount的压缩包传到Alpine里,解压并安装;
然后启动udev-trigger服务,并设为开机自动启动:

apk add --allow-untrusted usbmount-0.0.23-r0.apk 
rc-service udev-trigger start
rc-update add udev-trigger

那么好的各位,现在只要虚拟机上有USB硬盘接入,就会被自动挂载到media/usb0
只需将这个目录用Samba共享出来,就可以在宿主机上读写了
接下来编辑etc/samba/smb.conf
Share Definitions行后默认把家目录共享出来了,
删掉这些配置,改为下面的配置:

[usb0]
path = /media/usb0
valid users = root
public = no
writable = yes

把root用户添加到samba用户中,同时设定一个独立密码
然后设置自启samba服务

smbpasswd -a root
rc-service samba start
rc-update add samba

为了测试效果,我们现在就插上USB硬盘
然后在虚拟机的设置 - USB设备中,
添加这个硬盘的筛选器,并且保存
这样以后硬盘就会被直接连接到虚拟机,只要有在运行
在宿主机的资源管理器访问\\虚拟机的IP
输入用户名root和密码之后就能看到共享的usb0文件夹

如果能看到硬盘的内容的话,就算完成九点九分了
映射网络驱动器的功能,可以映射到“我的电脑”里面
不过我们肯定还需要一个方便的开关,以便日常的使用

在VBox中给虚拟机右键创建桌面快捷方式
右键属性查看,目标的结尾是
VirtualBoxVM.exe" --comment "虚拟机名" --startvm "{UUID}"
把它修改成(注意第一个参数没有横线)
VBoxManage.exe" startvm "{UUID}" --type headless
这个快捷方式能够后台启动Alpine虚拟机;
复制一份,修改成
VBoxManage.exe" controlvm "{UUID}" acpipowerbutton
这个快捷方式用来给虚拟机发送ACPI关机信号
有心的话,还可以给快捷方式设定快捷键

有了这两个快捷方式,除了第一次使用需要添加USB筛选器以外,
只要后台启动虚拟机,然后稍等片刻接上硬盘就可以直接进我的电脑访问了
数据读写完成后,ACPI关掉虚拟机即可取下硬盘
目前还没见过会后台读写网络驱动器的魔鬼软件
所以应该不会有太大的占用问题

感想

简单测试了一下,这个方案没有明显的读写性能问题,
Alpine虚拟机的占用也非常小,折腾程度中等,效果还算好用
Lab的各位如果喜欢这篇NOTE的话,记得点收藏哦

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注