news 2026/8/13 12:49:08

KVM虚拟机高效文件传输方案:从SCP到Virtio-FS实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
KVM虚拟机高效文件传输方案:从SCP到Virtio-FS实战指南

1. 为什么虚拟机文件传输是个“技术活”?

刚接触KVM虚拟化的朋友,可能都经历过这个阶段:在宿主机上吭哧吭哧编译好了一个程序,或者下载了一个重要的配置文件,然后一拍脑袋——这玩意儿怎么塞到虚拟机里去?反过来,虚拟机里生成的日志、数据,又怎么方便地弄出来?这看似是个小问题,但在生产环境和日常开发中,文件传输的频率和重要性,往往超乎想象。它不像物理机之间插个U盘或者拖拽文件那么简单,虚拟机被一层虚拟化技术“隔离”了起来,这既是安全的保障,也成了数据流动的一道墙。

我见过不少运维和开发同事,一开始会用一些“土办法”,比如在虚拟机里搭建一个FTP或者HTTP服务器,然后在宿主机上用curlwget去拉取。这方法当然能work,但太笨重了,每次都要配置服务、开端口、考虑权限,传输小文件简直是杀鸡用牛刀。更高效、更“原生”的方法,一定是利用虚拟化平台自身提供的通道或机制。对于KVM(Kernel-based Virtual Machine)来说,作为Linux内核原生的虚拟化方案,它和宿主机Linux系统有着天然的紧密联系,这为我们提供了多种既安全又高效的传输方案。搞明白这些方案的选择和背后的原理,不仅能解决“传文件”这个具体问题,更能加深你对虚拟化网络、存储和半虚拟化驱动等核心概念的理解。

2. 方案全景图:从“外设模拟”到“内存共享”

在动手之前,我们得先理清思路。把文件从宿主机弄到虚拟机,本质上是一个“跨边界”的数据移动问题。这个边界,就是虚拟化层。根据数据穿越这个边界所依赖的技术路径不同,主流方法可以归为以下几类,它们各有优劣,适用于不同场景:

第一类:基于网络的文件传输这是最通用、最容易被想到的方法。为虚拟机配置好网络(NAT或桥接),使其能与宿主机互通。之后,就可以使用任何基于网络的协议来传输文件,例如:

  • SCP / SFTP: 通过SSH协议,安全可靠,是Linux环境下的首选。
  • HTTP / HTTPS: 在宿主机起个简单的Python HTTP服务 (python3 -m http.server),在虚拟机里用wgetcurl下载。
  • NFS / Samba: 搭建网络文件系统,实现目录级的共享,适合需要频繁交互的场景。
  • FTP / RSYNC: 传统但有效的文件传输协议。

优点: 通用性强,不依赖特定虚拟化平台,只要网络通,任何虚拟机(KVM、VirtualBox、VMware)都能用。缺点: 需要配置并确保网络连通性;需要虚拟机内安装相应的客户端工具(如openssh-client,wget);有网络开销;如果虚拟机没网络或网络隔离严格,此路不通。

第二类:基于虚拟存储设备的传输这类方法的核心思想是,把一个宿主机上的文件(比如一个ISO镜像或一个磁盘镜像)当作一个“虚拟光盘”或“虚拟磁盘”挂载到虚拟机上。

  • 虚拟光盘(ISO): 将需要传输的文件打包成ISO镜像,然后通过virshvirt-manager将ISO文件作为CD-ROM设备挂载到虚拟机。虚拟机内就能像读取光盘一样读取文件。
  • 虚拟磁盘镜像: 创建一个额外的、较小的qcow2或raw格式磁盘镜像文件,将其同时挂载到宿主机和虚拟机(需要支持双端挂载的工具或特定格式,实践中有难度)。

优点: 不依赖网络,适合初始化或网络环境复杂的场景。挂载ISO尤其常用于向虚拟机安装操作系统或驱动。缺点: 不够灵活,每次传输都需要重新制作镜像并挂载/卸载,无法实现交互式的、随时的文件交换。虚拟磁盘的双端挂载配置复杂,且有数据损坏风险。

第三类:基于半虚拟化驱动的通道这是KVM环境下最高效、最优雅的解决方案,也是本文要重点剖析的。它通过在宿主机和虚拟机之间,利用虚拟化平台提供的特殊通信机制(如virtio-serial)来传输数据。最典型的工具是virtiofsspice-vdagent

  • virtiofs(Virtio-FS): 一种基于FUSE(用户空间文件系统)和virtio半虚拟化框架的共享文件系统。它允许宿主机的一个目录直接以文件系统的形式出现在虚拟机内,性能接近原生。
  • spice-vdagent: SPICE远程桌面协议配套的代理程序,除了提供剪贴板共享、分辨率自适应外,也包含了文件传输功能(通常通过SPICE WebDAV通道)。

优点: 高性能、低延迟、体验接近本地文件操作(尤其是virtiofs)。是KVM推荐的生产环境用法。缺点: 需要虚拟机内核和客户机工具的支持,配置步骤相对复杂,但一劳永逸。

第四类:使用管理工具的内置功能virt-manager这样的图形化管理工具,在通过SPICE或VNC连接虚拟机时,通常集成了拖拽文件传输的功能。这背后其实就是调用了spice-vdagent

为了更直观地对比,我将这几种核心方案的关键特性整理如下:

方案类别代表工具/协议是否需要虚拟机网络是否需要额外安装(客户机)性能配置复杂度最佳适用场景
网络传输SCP, HTTP, NFS是(客户端工具)依赖网络质量低(仅网络配置)通用场景,临时传输,跨平台
存储设备虚拟ISO挂载否(系统自带光盘驱动)低(每次需打包挂载)系统初始化、安装软件/驱动
半虚拟化通道virtiofs是(驱动+工具)(接近原生)生产环境,频繁文件交互
管理工具集成virt-manager拖拽(依赖SPICE通道)是(spice-vdagent中(图形化配置)桌面虚拟化,临时便捷传输

注意: 选择哪种方案,首先取决于你的虚拟机是否具备网络连接。如果网络是通的,SCP几乎总是最快捷的选择。如果网络不通或追求极致性能与集成度,那么配置virtiofs这样的半虚拟化方案就是必经之路。

3. 实战:配置高性能的Virtio-FS共享目录

网络传输(如SCP)虽然方便,但在需要频繁、大量交换文件,或者虚拟机处于隔离网络时,就显得力不从心。virtiofs作为当前KVM社区力推的共享文件方案,它避免了网络协议栈的开销,通过virtio直接进行内存映射和通信,性能提升非常显著。下面,我将手把手带你完成一个典型的virtiofs配置。

3.1 宿主机端:准备与配置

首先,确保你的宿主机系统是比较新的发行版(如Ubuntu 20.04+/CentOS 8+/Fedora等),内核支持virtiofsdvirtiofsd是一个守护进程,负责将宿主机的目录导出给虚拟机。

步骤1:安装必要软件包

# 对于 Debian/Ubuntu 系列 sudo apt update sudo apt install virtiofsd libvirt-daemon-system -y # 对于 RHEL/CentOS/Rocky Linux 8+ sudo dnf install virtiofsd libvirt -y # 或使用较旧的 yum # sudo yum install virtiofsd libvirt -y # 对于 Fedora sudo dnf install virtiofsd libvirt -y

步骤2:创建共享目录并准备启动脚本假设我们想把宿主机的/home/user/vm_share目录共享给虚拟机。

# 创建共享目录 mkdir -p /home/user/vm_share # 设置合适的权限,确保运行libvirt的用户(通常是‘qemu’或‘libvirt-qemu’)可以读取 sudo chown -R qemu:qemu /home/user/vm_share # 或者更宽松一点,给所有用户读写权限(测试用,生产环境请严格限制) sudo chmod -R 777 /home/user/vm_share

接下来,我们需要为virtiofsd创建一个systemd服务单元文件,以便管理。创建文件/etc/systemd/system/virtiofsd-share.service

[Unit] Description=Virtio-fs shared folder service After=network.target [Service] Type=simple ExecStart=/usr/libexec/virtiofsd \ --socket-path=/run/virtiofsd-share.sock \ --shared-dir=/home/user/vm_share \ --cache=auto \ --sandbox=chroot \ --thread-pool-size=4 Restart=on-failure User=qemu Group=qemu [Install] WantedBy=multi-user.target

关键参数解析

  • --socket-path: 指定一个Unix域套接字路径,这是宿主机和虚拟机内virtio-fs驱动通信的接口。
  • --shared-dir: 要共享的宿主机目录。
  • --cache=auto: 设置缓存模式,auto是推荐值,会根据情况使用内核page cache或DAX(直接访问)以获得最佳性能。
  • --sandbox=chroot: 安全沙箱选项,将守护进程限制在共享目录内。
  • --thread-pool-size: 工作线程数,根据CPU核心数调整。

步骤3:启动服务并设置开机自启

sudo systemctl daemon-reload sudo systemctl start virtiofsd-share.service sudo systemctl enable virtiofsd-share.service # 检查服务状态 sudo systemctl status virtiofsd-share.service

3.2 虚拟机XML配置:添加文件系统设备

现在,我们需要修改虚拟机的Libvirt XML定义,添加一个filesystem类型的设备,指向我们刚刚创建的socket。

首先,找到你的虚拟机名称(假设为myvm),然后编辑其XML配置:

sudo virsh edit myvm

在XML文件的<devices>部分内,添加如下配置块。位置通常放在所有磁盘<disk>设备之后,网络<interface>设备之前或之后,保持结构清晰即可。

<devices> ... (你的磁盘、网卡等配置) ... <filesystem type='mount' accessmode='passthrough'> <driver type='virtiofs'/> <source socket='/run/virtiofsd-share.sock'/> <target dir='host_share'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> </filesystem> ... (其他设备) ... </devices>

配置解析

  • type='mount'accessmode='passthrough': 表示使用直通模式,虚拟机内对文件的操作会直接映射到宿主机文件系统。
  • <driver type='virtiofs'/>: 指定使用virtio-fs驱动。
  • <source socket='...'/>: 指向宿主机上virtiofsd监听的Unix socket路径。
  • <target dir='host_share'/>: 这个名称是虚拟机内看到的挂载点名称,注意,这还不是路径,只是一个标签
  • <address .../>: 为这个设备指定一个PCI地址。你需要确保这个地址(slot值)不与虚拟机内其他PCI设备冲突。slot值可以依次递增,例如已有设备用到0x06,这里就用0x07

保存并退出编辑器后,Libvirt会自动应用配置。你需要关闭虚拟机,然后重新启动(不是重启),新的设备才会被识别。

3.3 客户机(虚拟机)内部:挂载共享目录

启动虚拟机后,我们需要在虚拟机内部进行操作。首先,确保虚拟机内核支持virtiofs。对于Linux内核5.4+的现代发行版,通常已包含virtiofs驱动模块(virtiofs.kovirtio_fs)。

步骤1:检查设备是否被识别虚拟机启动后,你可以通过lspci命令查看是否识别到了新的virtio设备。

lspci | grep -i virtio

你应该能看到一个类似00:07.0 Unclassified device [00ff]: Red Hat, Inc. Virtio filesystem的设备。

步骤2:手动挂载文件系统在虚拟机内,virtio-fs设备不会自动挂载。我们需要手动创建挂载点并进行挂载。

# 创建挂载点目录 sudo mkdir -p /mnt/host_share # 进行挂载 sudo mount -t virtiofs host_share /mnt/host_share

这里的host_share就是XML配置中<target dir='host_share'/>指定的标签名。现在,进入/mnt/host_share目录,你应该能看到宿主机/home/user/vm_share目录下的所有内容。

步骤3:配置自动挂载(可选但推荐)为了每次启动虚拟机都能自动挂载,需要将其添加到/etc/fstab文件中。

echo 'host_share /mnt/host_share virtiofs defaults 0 0' | sudo tee -a /etc/fstab

或者手动编辑/etc/fstab,添加一行:

host_share /mnt/host_share virtiofs defaults 0 0

下次重启虚拟机,共享目录就会自动挂载到/mnt/host_share

踩坑点: 最常见的错误是虚拟机启动后找不到host_share这个设备。请务必按顺序检查:1) 宿主机virtiofsd服务是否正常运行 (systemctl status)。2) 虚拟机XML配置是否正确,特别是socket路径。3) 虚拟机是否完全关闭后重新启动,而非热重启。4) 虚拟机内核是否太旧,需要手动安装virtiofs驱动(对于较老的系统,可能需要编译或安装linux-modules-extra包)。

4. 备选与应急:网络传输与虚拟介质挂载详解

虽然virtiofs是终极解决方案,但在某些特定场景下,其他方法可能更快捷或更可行。掌握这些备选方案,能让你在面对不同环境时游刃有余。

4.1 基于网络的SCP传输:最通用的后备方案

当你的虚拟机拥有IP地址并能与宿主机通信时,SCP(Secure Copy)几乎总是最直接的选择。它利用SSH协议,安全且无需额外服务。

前提条件

  1. 虚拟机已安装并启动SSH服务 (openssh-server)。
  2. 宿主机能通过IP地址或主机名访问虚拟机(通常需要桥接或NAT网络配置正确)。
  3. 你知道虚拟机的用户名和密码(或已配置SSH密钥)。

操作示例: 假设虚拟机IP是192.168.122.10,用户是ubuntu

  • 从宿主机传输文件到虚拟机
    # 传输单个文件 scp /path/to/local/file.txt ubuntu@192.168.122.10:/home/ubuntu/ # 传输整个目录 scp -r /path/to/local/dir ubuntu@192.168.122.10:/home/ubuntu/
  • 从虚拟机拉取文件到宿主机
    scp ubuntu@192.168.122.10:/path/to/remote/file.txt /local/path/

实操心得: 如果频繁使用SCP,强烈建议在宿主机和虚拟机之间配置SSH密钥免密登录,能极大提升效率。另外,如果虚拟机IP是动态分配的(DHCP),可以在宿主机Libvirt的NAT网络配置中为虚拟机MAC地址绑定固定IP,或者在虚拟机内设置静态IP。

4.2 虚拟ISO挂载:无网络环境的初始化利器

当你需要向一个全新的、未配置网络的虚拟机传输大型安装包、驱动或初始化脚本时,挂载ISO镜像是最经典的方法。

步骤1:在宿主机创建ISO镜像首先,将需要传输的文件整理到一个目录下,例如~/transfer_files

# 使用 genisoimage 或 mkisofs 命令创建ISO sudo apt install genisoimage # Debian/Ubuntu # sudo yum install genisoimage # RHEL/CentOS genisoimage -o /tmp/transfer.iso -J -r ~/transfer_files

-J生成Joliet扩展,-r设置Rock Ridge扩展并放宽文件权限,确保Windows和Linux都能较好兼容。

步骤2:将ISO挂载到虚拟机可以通过virsh命令或virt-manager图形界面完成。

  • 使用virsh命令
    # 将ISO附加为光盘设备 sudo virsh attach-disk myvm /tmp/transfer.iso sda --type cdrom --mode readonly # 或者更规范的,使用 `attach-disk` 或编辑XML临时添加一个 `<disk>` 设备 # 更简单的方式是使用 `virt-manager` 图形界面操作
  • 使用virt-manager
    1. 打开虚拟机详情。
    2. 点击菜单栏 “View” -> “Details”。
    3. 在左侧硬件列表中选择 “IDE CDROM 1” 或 “SATA CDROM 1”(取决于虚拟机总线类型)。
    4. 在右侧 “Source” 处,选择 “ISO image”,点击 “Browse”,找到并选择/tmp/transfer.iso
    5. 勾选 “Connect at startup”。

步骤3:在虚拟机内访问光盘启动(或重启后)虚拟机,系统通常会自动挂载光盘。如果没有,可以手动挂载。

# 查看光盘设备,通常是 /dev/sr0 或 /dev/cdrom lsblk # 创建挂载点并挂载 sudo mkdir -p /mnt/cdrom sudo mount /dev/sr0 /mnt/cdrom # 对于Windows虚拟机,光盘会自动出现在“我的电脑”中。

传输完成后,记得在virt-manager中断开ISO连接,或在virsh中执行detach-disk,避免每次启动都连接。

注意事项: ISO是只读的,适合一次性传输。频繁修改内容需要反复制作和挂载ISO,非常繁琐。此外,确保虚拟机有正确的光盘驱动(virtio-scsiIDE)。

5. 图形化捷径:利用Virt-Manager的拖拽功能

如果你使用virt-manager并通过SPICE协议连接虚拟机桌面,那么最省心的文件传输方式可能就是直接拖拽。这功能对临时传个小文件特别友好。

前提条件

  1. 虚拟机使用SPICE显示协议(在virt-manager的“Display”设置中查看)。
  2. 虚拟机内已安装并运行spice-vdagent守护进程。
    # 在虚拟机内安装(以Ubuntu为例) sudo apt install spice-vdagent # 启动服务并设置自启 sudo systemctl start spice-vdagentd sudo systemctl enable spice-vdagentd
  3. virt-manager的虚拟机硬件配置中,确保已添加virtio-serial设备,并且channel中启用了spicevmc(现代Linux发行版创建虚拟机时通常默认包含)。

操作方法

  1. virt-manager中打开虚拟机控制台。
  2. 在宿主机文件管理器中,选中要传输的文件或文件夹。
  3. 直接拖拽到虚拟机的桌面或文件管理器窗口内。
  4. 同样,也可以从虚拟机内拖拽文件到宿主机。

原理与局限: 拖拽功能本质上是spice-vdagent在后台通过virtio-serial通道建立了一个WebDAV服务来实现文件传输。它的优点是方便,无需配置网络或挂载。但缺点也很明显:传输大文件可能不稳定或速度慢;必须依赖SPICE图形会话;传输过程缺乏进度提示;并且,这个通道默认可能有文件大小限制(通常可通过修改/etc/vdagent/vdagent.conf配置调整,但不如virtiofs直接)。

个人体会: 图形化拖拽只适合传输几兆到几十兆的小文件,比如文档、图片或配置文件。对于镜像、软件包等大文件,我从不依赖它。在服务器无图形界面的场景下,此法完全失效。因此,它只是一个“锦上添花”的便捷功能,不能作为主力文件传输方案。

6. 故障排查与性能调优指南

即使按照步骤操作,也难免会遇到问题。这里我总结几个常见的坑和排查思路,以及让virtiofs跑得更快的调优技巧。

6.1 常见问题排查清单

问题1:virtiofs挂载失败,提示 “mount: /mnt/host_share: unknown filesystem type 'virtiofs'.”

  • 原因: 虚拟机内核不支持或未加载virtiofs内核模块。
  • 解决
    • 检查内核版本:uname -r,确保是5.4+。
    • 检查模块是否存在:find /lib/modules/$(uname -r) -name "*virtio*fs*"
    • 尝试手动加载模块:sudo modprobe virtiofs。如果失败,可能需要更新内核或安装linux-modules-extra包。
    • 对于旧系统(如CentOS 7),可能需要从源码编译或寻找第三方ELRepo仓库的kmod包。

问题2:virtiofs挂载失败,提示 “mount: /mnt/host_share: can‘t read superblock on host_share.”

  • 原因: 虚拟机系统未识别到virtio-fsPCI设备,或者XML配置中的<target dir>标签名与挂载命令中的名称不匹配。
  • 解决
    • 在虚拟机内执行lspci | grep -i virtio,确认是否有Virtio filesystem设备。
    • 如果没有,检查宿主机virtiofsd服务状态,并确认虚拟机是冷启动(完全关闭再开),而非重启。
    • 仔细核对挂载命令mount -t virtiofs <target_dir> <mount_point>中的<target_dir>是否与XML中的<target dir='...'/>完全一致,区分大小写

问题3:传输速度慢,尤其是大量小文件时。

  • 原因(网络传输): 网络延迟高或带宽小;SSH加密开销;磁盘I/O瓶颈。
  • 解决
    • 使用rsync代替scp,它对增量传输和断点续传更友好,且可以通过-z压缩减少传输量。
    • 考虑使用tar管道压缩传输:tar czf - /local/dir | ssh user@vm "tar xzf - -C /remote/path"
  • 原因(virtiofs: 默认缓存策略可能不适合你的负载;virtiofsd线程数不足。
  • 解决
    • 调整virtiofsd启动参数中的--cache模式。对于读多写少的场景,尝试--cache=always;对于需要频繁同步的写操作,使用--cache=noneauto是折中方案。
    • 增加--thread-pool-size,例如设置为CPU核心数(或2倍)。观察宿主机CPU使用率,如果virtiofsd进程CPU不高,可以继续增加。
    • 确保共享目录位于宿主机性能较好的磁盘上(如NVMe SSD),避免在机械硬盘或网络存储上。

问题4:权限问题,虚拟机内无法写入文件。

  • 原因virtiofspassthrough模式会映射文件所有者UID/GID。如果虚拟机内的用户UID与宿主机共享目录文件所有者的UID不匹配,就会导致权限错误。
  • 解决
    • 方案A(简单但不够安全): 将宿主机共享目录权限设为777(sudo chmod -R 777 /share)。仅用于测试。
    • 方案B(推荐): 在宿主机和虚拟机内使用相同的用户名和UID。例如,在宿主机和虚拟机内都创建一个名为devuser的用户,并确保其UID都是1001。这样文件权限就能正确映射。
    • 方案C: 使用virtiofsmappedsquashed访问模式。在XML配置中将accessmode改为accessmode='mapped',并可以配合<map>标签进行UID/GID映射。但这需要更复杂的配置。

6.2 Virtio-FS性能调优实践

要让virtiofs发挥极致性能,除了上述线程和缓存调整,还有几个进阶点:

  1. 启用DAX(Direct Access): DAX允许虚拟机直接映射宿主机的内存,绕过页面缓存,对于内存数据库(如Redis)、VM内存交换等场景有巨大提升。但这需要宿主机内核支持,并在文件系统层启用(如ext4xfsdax挂载选项)。配置复杂,且有一定风险,一般用户不建议使用。--cache=auto参数会在可能时自动尝试使用DAX。

  2. 调整虚拟机内存与CPU分配: 确保虚拟机有足够的内存。virtiofs会占用一部分内存作为缓存。为虚拟机分配更多的vCPU也能提升并发处理能力。

  3. 监控与诊断: 在宿主机上,可以使用perfsystemtap等工具观察virtiofsd进程的性能瓶颈。在虚拟机内,使用iostat,vmstat监控磁盘I/O。简单的tophtop查看virtiofsd的CPU占用率也是一个快速判断方法。

文件传输这个基础操作,就像虚拟化世界的“毛细血管”,其顺畅程度直接影响到开发和运维的效率。从最通用的SCP,到应急的ISO挂载,再到追求极致的virtiofs,每一种方案都有其存在的土壤。我的经验是,在新装系统或需要频繁交互的开发环境,花半小时配置好virtiofs绝对是笔划算的投资,它能带来近乎本地的文件操作体验。而在临时调试或网络环境良好的情况下,一条SCP命令则是最快的解决方案。理解其背后的原理,能让你在遇到问题时不再盲目尝试,而是有的放矢地排查。最后,别忘了安全性和权限管理,尤其是在生产环境,共享目录的访问控制需要仔细规划。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/13 12:46:42

国赛一等奖实数公开课:从无理数发现到数轴对应的教学实战拆解

在初中数学的教学实践中&#xff0c;如何将抽象的数学概念转化为学生易于理解和掌握的知识&#xff0c;是每位教师面临的挑战。实数作为连接有理数与无理数的桥梁&#xff0c;是初中数学的核心内容之一&#xff0c;其教学效果直接影响学生对后续函数、几何等知识的学习。本文将…

作者头像 李华
网站建设 2026/8/13 12:43:42

MATLAB仿真万花尺:从旋轮线数学到异形齿轮设计原理

1. 项目概述&#xff1a;当数学玩具遇上工程仿真小时候玩过万花尺吗&#xff1f;就是那种由一个带齿的大圆盘和几个带孔的小齿轮组成的绘图玩具&#xff0c;用笔穿过小齿轮的孔&#xff0c;让小齿轮沿着大圆盘内壁滚动&#xff0c;就能画出各种繁复而美丽的曲线。这玩意儿看似简…

作者头像 李华
网站建设 2026/8/13 12:40:30

激光共聚焦显微镜在微观磨损形貌三维测量中的核心作用

轴承内圈右侧突然出现一片粘着痕迹。二维显微镜下只看到纹理变乱&#xff0c;高度丢了——材料是被撕走还是被堆上去&#xff0c;现场的人当场就卡壳。设备不能拆&#xff0c;实验室仪器也进不来。光度立体视觉原位重构能在现场快速拿到三维形貌&#xff0c;但精度有上限&#…

作者头像 李华
网站建设 2026/8/13 12:40:18

免费开源的视频压缩工具,一个229MB的视频如何缩到14MB?

免费开源的视频压缩工具&#xff0c;一个229MB的视频如何缩到14MB&#xff1f; 【免费下载链接】compressO Convert any video/image into a tiny size. 100% free & open-source. Available for Mac, Windows & Linux. 项目地址: https://gitcode.com/gh_mirrors/co…

作者头像 李华