Loading... # 通过 curl 直接安装 Linux 系统 # 一、概述 ## 1. 简介 ### A. 是什么 一种非传统的 Linux 系统安装方式,通过命令行直接将磁盘镜像从网络下载并写入目标磁盘,无需中间存储步骤。 ### B. 为什么学 - 理解 Unix 系统中「一切皆文件」的设计理念 - 掌握远程服务器快速重装系统的实用技巧 - 了解 Linux 引导过程和磁盘操作原理 ### C. 学完能做什么 - 使用一条命令完成系统安装 - 创建可远程部署的自定义系统镜像 - 在没有额外存储空间的情况下重装系统 ## 2. 前置知识 ### A. 必备技能 - 基本 Linux 命令行操作 - 磁盘设备概念(/dev/sda、/dev/nvme0n1) - 管道和重定向操作 ### B. 推荐知识 - dd 命令使用 - EFI 引导原理 - QEMU 虚拟机基础 # 二、核心原理 ## 1. 基本概念 Unix 系统的设计哲学是「一切皆文件」,磁盘设备在文件系统中以特殊文件形式存在,可以直接读写。 ## 2. 工作原理 ```mermaid graph LR A[网络镜像] -->|curl/wget| B[管道传输] B -->|gunzip| C[解压数据] C -->|dd 或 重定向| D[/dev/sdX] D --> E[磁盘写入] E --> F[重启引导] ```  ## 3. 为什么可行 - 设备文件可直接读写,绕过文件系统层 - EFI 固件能自动发现新的 EFI 系统分区 - 写入完成后重启即可进入新系统 # 三、基本操作 ## 1. 最简命令 直接下载并写入磁盘: ```bash curl https://example.com/disk.img > /dev/sda ``` ## 2. 常用变体 ### A. 使用 wget ```bash wget -O- https://example.com/disk.img > /dev/sda ``` ### B. 处理压缩镜像 ```bash curl https://example.com/disk.img.gz | gunzip | dd bs=1M of=/dev/sda status=progress ``` ### C. 通过 SSH 远程写入 ```bash gzip -vc disk.img | ssh root@server -- sh -c 'gunzip -vc | dd bs=1M of=/dev/sda status=progress' ``` # 四、创建自定义镜像 ## 1. 使用 QEMU 创建镜像 ### A. 创建原始磁盘 ```bash truncate -s 10G disk.img ``` ### B. 在虚拟机中安装系统 ```bash qemu-system-x86_64 \ -hda ./disk.img \ -m 2G \ -enable-kvm \ -nic user \ -serial mon:stdio ``` 完成安装后,disk.img 即为可部署的系统镜像。 ## 2. 使用 NixOS 自动化构建 NixOS 提供了自动构建磁盘镜像的功能: ```nix import <nixpkgs/nixos/lib/make-disk-image.nix> ``` 这样可以实现完全自动化的镜像构建流程。 # 五、部署实战 ## 1. 树莓派刷写 传统方法需要下载、解压、使用 dd 写入。简化后的命令: ```bash curl https://www.raspberrypi.com/image.img.gz | gunzip | sudo dd bs=1M of=/dev/sdx status=progress ``` ## 2. VPS 远程重装 ### A. 使用救援镜像 大多数 VPS 提供商提供救援镜像功能,步骤如下: 1. 在控制面板启动进入救援模式 2. 救援系统启动后,执行写入命令 3. 重启进入新系统 示例: ```bash # 在救援环境中 wget -O- https://your-server/custom.img.gz | gunzip | dd bs=1M of=/dev/sda status=progress sync reboot ``` ### B. 直接写入运行中的系统 理论上可以直接写入正在使用的系统磁盘: ```bash gzip -vc disk.img | ssh root@server -- bash -c 'gunzip -vc > /dev/sda' ``` 但这种方法会导致系统崩溃,因为正在运行的系统文件被覆盖。 # 六、技术细节 ## 1. 磁盘卸载问题 尝试卸载根分区时会遇到错误: ```bash root@localhost:~# umount /dev/sda1 umount: /: target is busy. ``` 这是因为系统正在运行于该磁盘上。 ## 2. 解决方案 ### 方案 A:使用救援镜像 - 启动到独立的救援系统 - 原系统磁盘不再被挂载 - 可以安全写入 ### 方案 B:内存运行(理论上可行) - 将必要工具加载到 RAM - 卸载所有磁盘 - 从 RAM 中执行写入操作 ```mermaid graph TD A[当前系统] --> B[加载工具到 RAM] B --> C[卸载磁盘] C --> D[从 RAM 执行写入] D --> E[新系统写入完成] E --> F[重启] ```  # 七、注意事项 ## 1. 安全警告 - **极其危险**:错误的磁盘选择会导致数据丢失 - **不可逆操作**:写入过程无法撤销 - **确认设备名**:仔细检查 /dev/sdX 是否正确 ## 2. 验证镜像 虽然实际操作中很少有人做,但理论上应该验证镜像完整性: ```bash sha256sum disk.img ``` ## 3. 写入后同步 写入完成后执行 sync 命令确保数据落盘: ```bash sync ``` # 八、进阶话题 ## 1. 其他传输协议 除了 HTTP/HTTPS,理论上可以使用任何文件传输协议: - BitTorrent - FTP - NFS - 甚至 SMTP ## 2. 自动化部署 结合 PXE 引导和预启动执行环境(PXE),可以实现完全自动化的系统部署: 1. 机器从网络启动 2. 下载安装脚本 3. 自动执行 curl > /dev/sdX 4. 重启进入新系统 *** ## 参考资料 1. [curl > /dev/sda](https://astrid.tech/2026/03/24/0/curl-to-dev-sda/) 最后修改:2026 年 03 月 26 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏