在Docker容器中的虚拟DSM。
功能
多个磁盘
KVM加速
支持升级
使用方法
常见问题解答
如何使用?
非常简单!步骤如下:
启动容器并用浏览器访问 端口5000
等待DSM准备就绪,设置用户名和密码,然后会被带到桌面界面。
尽情享受你的新设备,别忘了给这个仓库点赞!
如何更改存储位置?
要更改存储位置,在你的compose文件中添加以下绑定挂载:
volumes: - /var/dsm:/storage
将示例路径/var/dsm替换为你想要的存储目录。
如何改变磁盘大小?
要扩展默认的16GB大小,找到你的compose文件中的DISK_SIZE设置,并将其修改为所需的容量:
environment: DISK_SIZE: "128G"
提示: 这也可以用来无数据丢失地扩大现有磁盘的容量。
如何创建可扩展的磁盘?
默认情况下,磁盘的全部容量会预先保留。
要创建只分配实际使用的空间的可扩展磁盘,添加以下环境变量:
environment: DISK_FMT: "qcow2"
注意: 这可能会降低磁盘的写入性能。
如何添加多个磁盘?
创建额外的磁盘,修改你的compose文件如下所示:
environment: DISK2_SIZE: "32G" DISK3_SIZE: "64G" volumes: - /home/example:/storage2 - /mnt/data/example:/storage3
如何传递一个磁盘?
可以通过以下方式直接在compose文件中传递磁盘设备:
devices: - /dev/disk/by-uuid/12345-12345-12345-12345-12345:/disk2
确保通过UUID(可通过lsblk -o name,uuid获取)而不是名称(如/dev/sdc)来绑定磁盘,以防驱动器字母发生改变时绑定错误的磁盘。
重要提示: 设备需要为空(没有分区表),否则DSM不总是能将其格式化为卷。
警告: 不要用此功能来共享主机上的文件,当DSM创建卷时,所有文件会不带警告地丢失。
如何调整CPU或内存的数量?
默认情况下,容器可以使用最多1个CPU核心和1GB的RAM。
如果要调整这个值,你可以使用以下环境变量指定所需数量:
environment: RAM_SIZE: "4G" CPU_CORES: "4"
如何检查我的系统是否支持KVM?
要检查系统是否支持KVM,运行以下命令:
sudo apt install cpu-checker sudo kvm-ok
如果kvm-ok返回错误,说明不能使用KVM加速,请检查:
是否在BIOS中启用了虚拟化扩展(Intel VT-x 或 AMD SVM)。
你正在运行的是支持它们的操作系统,如Linux或Windows 11(不幸的是,macOS和Windows 10不支持)。
如果你在虚拟机里运行容器,已启用“嵌套虚拟化”。
如果你不使用云提供商,因为大多数云提供商不允许其VPS使用嵌套虚拟化。
如果kvm-ok没有任何错误,但容器仍然抱怨缺少/dev/kvm,可能需要在compose文件中添加privileged: true(或在run命令中添加--privileged),以排除权限问题。
如何给容器分配独立的IP地址?
默认情况下,容器使用桥接网络,与主机共享IP地址。
如果你想为容器分配单独的IP地址,你可以创建一个macvlan网络如下:
docker network create -d macvlan \\ --subnet=192.168.0.0/24 \\ --gateway=192.168.0.1 \\ --ip-range=192.168.0.100/28 \\ -o parent=eth0 vdsm
确保修改这些值以匹配你的本地子网。
创建网络后,修改你的compose文件如下所示:
services: dsm: container_name: dsm ..<省略>.. networks: vdsm: ipv4_address: 192.168.0.100 networks: vdsm: external: true
这种方法的一个好处是,你不再需要做端口映射,因为所有端口默认都是暴露的。
重要提示: 由于macvlan设计的原因,这个IP地址无法从Docker主机访问。如果你关心这个问题,需要创建 第二个macvlan 作为变通办法。
如何让DSM从我的路由器获取IP地址?
配置容器使用 macvlan 后,DSM可以像其他设备一样成为家庭网络的一部分,向你的路由器请求IP地址。
要启用此模式,在你的compose文件中添加以下行:
environment: DHCP: "Y" devices: - /dev/vhost-net device_cgroup_rules: - 'c *:* rwm'
注意: 在这种模式下,容器和DSM各自会有自己的独立IP地址。
如何传递GPU?
要传递你的Intel GPU,在你的compose文件中添加以下行:
environment: GPU: "Y" devices: - /dev/dri
提示: 可以用于启用Synology Photos中的面部识别等功能。
如何安装特定版本的vDSM?
默认安装7.2版本,但如果你想使用旧版本,可以在compose文件中添加下载URL如下:
environment: URL: "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_VirtualDSM_42218.pat"
这样,甚至可以在保持所有文件数据不变的情况下切换不同版本。
如果没有互联网连接,也可以通过将URL设置为:
environment: URL: "DSM_VirtualDSM_42218.pat"
之后在你的/storage目录中放置一个名为DSM_VirtualDSM_42218.pat的文件来跳过下载过程。
与标准DSM相比有什么不同?
仅有两个细微差别:一是虚拟机管理器包不可用;二是Surveillance Station不包含免费许可。
这个项目合法吗?
是的,本项目仅包含开源代码,并不分发任何受版权保护的材料,也未尝试规避任何版权保护措施。因此,根据所有适用法律,这个项目被认为是合法的。
然而,安装Synology的虚拟DSM需接受其最终用户许可协议,该协议不允许在非Synology硬件上安装。因此,只能在官方Synology NAS上运行此容器,其他用途均违反了他们的使用条款和条件。
通过Docker Compose:
services: dsm: container_name: dsm image: vdsm/virtual-dsm environment: DISK_SIZE: "16G" devices: - /dev/kvm cap_add: - NET_ADMIN ports: - 5000:5000 volumes: - /var/dsm:/storage stop_grace_period: 2m
通过Docker命令行:
docker run -it --rm -p 5000:5000 --device=/dev/kvm --cap-add NET_ADMIN --stop-timeout 120 vdsm/virtual-dsm
通过Kubernetes:
kubectl apply -f kubernetes.yml