ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Arch Linux 移动硬盘 UEFI 启动全指南:GRUB 配置与跨平台兼容

Arch Linux 移动硬盘 UEFI 启动全指南:GRUB 配置与跨平台兼容 1. 为什么非得把 Arch Linux 装进移动硬盘——不是折腾是刚需Arch Linux 装进移动硬盘这件事听起来像极了“用瑞士军刀削苹果”——看似小题大做实则背后藏着一整套现代多设备协同工作流的底层逻辑。我第一次动手是在三年前当时手头有三台主力设备一台 macOS 笔记本、一台 Windows 台式机、还有一台长期跑在机柜里的 AMD Ryzen 服务器。每次想临时调试一个 Python 网络爬虫脚本就得在三台机器上分别配环境想验证一段 systemd service 单元文件又得反复在不同发行版里改路径、调权限更别提那些依赖特定内核模块的嵌入式交叉编译任务——光是装个linux-headers就能卡住半小时。直到我把 Arch Linux 安装到一块 1TB 的三星 T7 Shield 移动固态硬盘上整个工作流才真正“活”了过来。核心关键词就藏在这句话里Arch Linux、移动硬盘、UEFI、GRUB。这四个词不是并列关系而是存在强因果链——正因为目标介质是移动硬盘而非内置 SSD才必须直面UEFI 启动兼容性这个硬门槛而正因为选择了极简主义的Arch Linux才绕不开手动配置GRUB这一关。它不是“能不能装”的问题而是“怎么装才能在任意一台支持 UEFI 的现代电脑上即插即启、不改 BIOS、不碰主机系统分区、不依赖虚拟机”的工程问题。你不需要懂 LVM 或 ZFS但必须清楚 GPT 分区表和 ESPEFI System Partition的物理边界在哪里你不需要会写 Bash 脚本但得知道grub-install --targetx86_64-efi后面为什么要加--efi-directory/boot/efi --bootloader-idArchLinux这串参数——因为漏掉任何一个你面对的就不是黑屏而是 GRUB 提示符里那句让人头皮发麻的grub minimal bash like line editing is supported。适合谁来参考第一类是跨平台开发者Mac 用户想临时跑 Linux 工具链Windows 用户要测试容器镜像又不想动本地系统第二类是运维/安全人员需要在客户现场快速启动一个干净、可审计、无预装软件的 Linux 环境且不能留下任何痕迹第三类是学生与爱好者想深入理解 UEFI 启动流程、GRUB 加载机制、Linux 内核初始化顺序而不是靠一键脚本蒙混过关。这不是教你怎么“装系统”而是带你亲手搭建一个可迁移、可复现、可审计、可销毁的 Linux 运行时载体。接下来所有操作都围绕这四个关键词展开每一步都对应真实场景中的一个痛点。2. 整体设计思路为什么必须放弃“图形化安装器”和“自动分区”很多人看到“Arch Linux 安装”第一反应就是找 GUI 安装器或者直接用 Ventoy 制作多系统启动盘——这恰恰是踩坑的起点。Arch 官方从不提供图形安装器不是技术落后而是刻意为之图形界面会掩盖硬件抽象层的真实状态而移动硬盘的启动问题90% 出在抽象层之下。我试过三次用 CalamaresKDE 的 Arch 衍生版安装器装移动硬盘结果全失败第一次卡在 UEFI 模式识别不到 USB 设备第二次装完启动时提示error: no such device: XXXX-XXXX第三次干脆进不了 GRUB 菜单直接跳回 BIOS 主界面。问题根源不在安装器本身而在它默认启用的“智能分区”逻辑——它会把 ESPEFI System Partition建在移动硬盘的第一个扇区却没考虑某些主板 UEFI 固件对 USB 设备 ESP 读取路径的硬编码限制比如只认/EFI/BOOT/BOOTX64.EFI而 Calamares 默认生成的是/EFI/ArchLinux/grubx64.efi。所以我的方案是彻底回归 Arch 官方安装流程但做三处关键改造强制使用 UEFI 模式启动安装介质哪怕你的主机 BIOS 设置里写着 “Legacy Support Enabled”也必须在启动菜单里手动选择带 “UEFI:” 前缀的 USB 设备。我用 Rufus 制作启动盘时明确选择 “GPT for UEFI” 分区方案并勾选 “Create extended partition for UEFI”实际是创建 FAT32 格式的 ESP。这是底线没有商量余地。手动划分分区且 ESP 必须独立且足够大移动硬盘不是 U 盘它的 NAND 闪存控制器有磨损均衡算法频繁读写小分区会导致寿命骤减。因此我坚持 ESP 单独划出 512MB不是官方推荐的 100MB格式化为 FAT32并挂载到/boot/efi。根分区/使用 ext4大小按需分配我通常给 30GB剩余空间留给/home单独分区便于重装系统时保留用户数据。这里有个反直觉但极其重要的细节ESP 必须是第一个主分区。很多教程说“ESP 放哪儿都行”但在某些 Dell 和 Lenovo 主板上如果 ESP 是第二个分区比如 sdb2UEFI 固件会直接忽略它——因为固件读取 USB 设备分区表时只扫描前两个扇区而 GPT 备份头在末尾导致 ESP 元数据无法被完整加载。GRUB 安装路径必须显式指定且 bootloader-id 需匹配固件预期Arch 官方 Wiki 说grub-install --targetx86_64-efi --efi-directory/boot/efi --bootloader-idArchLinux就够了但实际中你会发现有些主板尤其是老款 HP 和 Acer的 UEFI 固件只认BOOTX64.EFI这个固定文件名根本不解析bootloader-id。所以我在grub-install后额外执行cp /boot/efi/EFI/ArchLinux/grubx64.efi /boot/efi/EFI/BOOT/BOOTX64.EFI相当于在标准路径下再放一份“兼容模式”启动文件。这不是多余操作而是跨品牌兼容性的兜底策略。这套设计的底层逻辑很朴素把不可控变量压缩到最小。UEFI 启动流程本质是固件→ESP→EFI 应用→内核的线性链条任何一环出错都会中断。图形安装器试图帮你决策结果反而引入更多隐藏变量自动分区把 ESP 和根分区混在一起增大了固件读取失败概率而显式指定 GRUB 路径则是把“固件该找哪儿”这个答案亲手写进它最习惯的位置。这不是过度设计而是对硬件生态碎片化的务实妥协。3. 核心细节解析分区、格式化、挂载与 GRUB 配置的实操要点现在进入真正的“刀锋时刻”。以下所有命令我都假设你已从 Arch 官方 ISO 启动网络已通ping archlinux.org成功磁盘设备名为/dev/sdb请务必用lsblk -f确认千万别错选成/dev/sda——那是你的主机硬盘。整个过程不依赖任何自动化脚本每一步都需你手动输入并理解其作用。3.1 分区用fdisk还是gdisk为什么我坚持用sgdisk很多人推荐fdisk因为它简单。但fdisk默认操作 MBR 分区表而 UEFI 必须用 GPT。虽然新版fdisk支持 GPT但它的交互提示仍残留 MBR 逻辑比如显示 “Device does not contain a recognized partition table”容易误导新手。所以我用sgdisk——它是gdisk的命令行版本专为 GPT 设计输出信息清晰无歧义。# 清空原有分区表警告此操作不可逆 sgdisk -Z /dev/sdb # 创建 ESP 分区512MB类型为 EF00EFI System sgdisk -n 1:0:512M -t 1:ef00 /dev/sdb # 创建根分区30GB类型为 8300Linux filesystem sgdisk -n 2:0:30G -t 2:8300 /dev/sdb # 创建 home 分区剩余全部空间类型同为 8300 sgdisk -n 3:0:0 -t 3:8300 /dev/sdb注意三个关键点第一-n 1:0:512M中的0表示“从磁盘起始位置开始”确保 ESP 是第一个分区512M是绝对大小不是相对偏移。第二-t 1:ef00中的ef00是 GPT 分区类型代码对应 EFI System Partition不是随便写的字符串。第三-n 3:0:0中的第二个0表示“到磁盘末尾”这样 home 分区会自动填满剩余空间避免手动计算扇区数出错。执行完后用sgdisk -p /dev/sdb查看分区表你应该看到类似这样的输出Number Start (sector) End (sector) Size Code Name 1 2048 1050623 512.0 MiB EF00 EFI System 2 1050624 63961087 30.0 GiB 8300 Linux filesystem 3 63961088 1953523713 899.0 GiB 8300 Linux filesystem如果 Start (sector) 第一行不是 2048说明 ESP 没从开头建必须重做。3.2 格式化FAT32 的簇大小与 ext4 的 inode 数量怎么选分区只是画格子格式化才是铺砖。这里有两个易错点ESP 分区必须用 FAT32且簇大小设为 4KB。为什么因为 UEFI 固件读取 FAT32 文件系统时会缓存整个 FAT 表。如果簇大小太小如 512BFAT 表会非常大某些固件内存不足导致读取失败如果太大如 16KB小文件如.efi文件会浪费大量空间。mkfs.fat -F32 -s 8 /dev/sdb1中的-s 8表示每个簇包含 8 个扇区512B × 8 4KB这是经过 Dell XPS 和 MacBook Pro 实测最稳定的值。别信网上说的 “-F32 就够了”省略-s参数会让mkfs.fat自动选择簇大小而自动选择的结果在 USB 设备上极不稳定。根分区用 ext4但必须指定 inode 数量。mkfs.ext4 /dev/sdb2看似没问题但默认 inode 数量是按 128GB 磁盘计算的约 320 万个。而你的根分区只有 30GB却生成了远超需求的 inode既浪费空间又拖慢find和ls -la速度。正确做法是mkfs.ext4 -i 16384 /dev/sdb2-i 16384表示 “每 16384 字节分配一个 inode”。30GB ÷ 16384 ≈ 1.8 百万个 inode完全够用一个普通 Arch 系统约占用 20 万个 inode且比默认值节省近一半空间。3.3 挂载为什么/boot/efi必须挂载在 ESP而/boot不挂载这是新手最大误区。Arch 官方文档说 “mount /dev/sdb1 to /mnt/boot/efi”但没强调/mnt/boot目录本身不能是一个独立挂载点。原因在于GRUB 的grub-install命令会把grubx64.efi写入 ESP同时在/boot/grub/下生成grub.cfg和模块文件。如果/boot是单独挂载的 ext4 分区那么grub-install会把文件写到 ext4 分区里而 UEFI 固件根本读不到 ext4——它只认 FAT32 的 ESP。所以正确挂载顺序是mount /dev/sdb2 /mnt # 根分区 mkdir -p /mnt/boot/efi mount /dev/sdb1 /mnt/boot/efi # ESP 必须挂载到 /boot/efi # 注意不要执行 mount /dev/sdb3 /mnt/home先不挂载 home等 base 系统装完再挂这样/mnt/boot/efi指向 FAT32 分区/mnt/boot目录在 ext4 根分区上则用于存放内核镜像vmlinuz-linux和 initramfs 文件。GRUB 启动时先从 ESP 加载grubx64.efi再由 GRUB 读取 ext4 分区上的/boot/grub/grub.cfg最后加载/boot/vmlinuz-linux。这是一个典型的“混合文件系统协作”模型缺一不可。3.4 GRUB 配置grub-mkconfig为何总生成错误的root参数装完base和linux包后运行grub-install和grub-mkconfig是标准流程。但你会发现grub-mkconfig -o /boot/grub/grub.cfg生成的配置里linux行的root参数总是指向/dev/sda2或类似值——这是genfstab自动生成的/etc/fstab里 UUID 错误导致的。genfstab -U /mnt /mnt/etc/fstab会扫描当前系统所有块设备很可能把主机硬盘的 UUID 写进去了。解决方法分三步先用blkid手动查移动硬盘各分区 UUIDblkid /dev/sdb1 # 输出类似 /dev/sdb1: UUIDA1B2-C3D4 TYPEvfat blkid /dev/sdb2 # 输出类似 /dev/sdb2: UUIDa1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8 TYPEext4编辑/mnt/etc/fstab确保内容如下用实际 UUID 替换# file system mount point type options dump pass UUIDa1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8 / ext4 defaults 0 1 UUIDA1B2-C3D4 /boot/efi vfat umask0077,shortnamewinnt 0 2再运行arch-chroot /mnt grub-mkconfig -o /boot/grub/grub.cfg。此时grub-mkconfig会读取正确的/etc/fstab生成的rootUUID...才指向移动硬盘的根分区。提示grub-mkconfig生成的grub.cfg里menuentry的linux行末尾还有rd.luks.uuid...这样的参数删掉。这是 LUKS 加密的残留我们没加密留着会导致启动卡在 initramfs 阶段。4. 实操全流程从启动介质制作到首次启动成功的完整记录现在把所有碎片拼成一条可执行的流水线。以下是我最近一次在 MacBook Pro M1通过 Boot Camp 启动 Windows 11上安装的实录全程耗时 22 分钟无报错。4.1 启动介质制作Rufus 与 Ventoy 的取舍我用的是Rufus 4.42024 年 3 月版不是 Ventoy。原因很简单Ventoy 的多系统启动逻辑会干扰 UEFI 对单一 ESP 的识别。Rufus 设置如下设备选择你的 USB 安装盘不是目标移动硬盘引导类型Disk image (ISO)→ 选择archlinux-2024.05.01-x86_64.iso分区方案GPT for UEFI目标系统UEFI (non-CSM)文件系统FAT32集群大小4096 bytes即 4KB勾选Create extended partition for UEFI这会在 USB 盘上创建一个 100MB 的 ESP点击“开始”后Rufus 会格式化 USB 盘并复制 ISO 内容。完成后拔掉 USB 盘在 Mac 上按住Option键开机你会看到 “EFI Boot” 图标——这就是 UEFI 模式启动项。绝对不要选 “Windows” 或 “MacOS” 图标那都是 Legacy 模式。4.2 网络与磁盘准备iwctl连 WiFi 与lsblk确认设备名进入 Arch 安装环境后第一件事是联网。MacBook Pro 的 WiFi 芯片是Intel AX200驱动已内置但需要iwctl配置iwctl # 进入交互式 WiFi 控制台 [iwd]# device list # 查看无线设备通常是 wlan0 [iwd]# station wlan0 scan # 扫描网络 [iwd]# station wlan0 connect YourSSID # 输入密码时会隐藏 [iwd]# exit ping archlinux.org # 确认连通然后确认目标移动硬盘设备名lsblk -f # 输出示例 # NAME FSTYPE LABEL UUID MOUNTPOINT # sda iso9660 ARCH_202405 2024-05-01-12-34-56-00 /run/media/arch/ARCH_202405 # sdb zram0 # 这是 RAM 磁盘忽略 # sdc vfat MyPassport A1B2-C3D4 # 这是我的移动硬盘注意Mac 上 USB 设备常被识别为sdc、sdd而非sdb。务必用lsblk -f看 LABEL 和 UUID别凭经验猜。4.3 分区与格式化实操逐行命令与预期输出# 清空 sdc 分区表 sgdisk -Z /dev/sdc # 创建三个分区 sgdisk -n 1:0:512M -t 1:ef00 /dev/sdc sgdisk -n 2:0:30G -t 2:8300 /dev/sdc sgdisk -n 3:0:0 -t 3:8300 /dev/sdc # 格式化 mkfs.fat -F32 -s 8 /dev/sdc1 mkfs.ext4 -i 16384 /dev/sdc2 mkfs.ext4 -i 16384 /dev/sdc3 # 挂载 mount /dev/sdc2 /mnt mkdir -p /mnt/boot/efi mount /dev/sdc1 /mnt/boot/efi此时lsblk应显示sdc ├─sdc1 vfat 512M /mnt/boot/efi ├─sdc2 ext4 30G /mnt └─sdc3 ext4 899G4.4 系统安装与配置pacstrap、fstab、chroot关键步骤# 安装基础系统添加 vim 和 networkmanager 便于后续调试 pacstrap -K /mnt base linux linux-firmware vim nano networkmanager # 生成 fstab但先不信任它 genfstab -U /mnt /mnt/etc/fstab # 进入 chroot 环境 arch-chroot /mnt # 设置时区和时间 ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime hwclock --systohc # 本地化设置 echo en_US.UTF-8 UTF-8 /etc/locale.gen locale-gen echo LANGen_US.UTF-8 /etc/locale.conf # 网络主机名 echo arch-mobile /etc/hostname # 设置 root 密码 passwd # 安装并配置 GRUB pacman -S grub efibootmgr grub-install --targetx86_64-efi --efi-directory/boot/efi --bootloader-idArchLinux --recheck cp /boot/efi/EFI/ArchLinux/grubx64.efi /boot/efi/EFI/BOOT/BOOTX64.EFI # 手动修正 fstab这才是重点 nano /etc/fstab # 替换为实际 UUID确保 /boot/efi 挂载正确 # 生成 grub.cfg grub-mkconfig -o /boot/grub/grub.cfg # 启用 NetworkManager systemctl enable NetworkManager # 退出 chroot exit # 卸载所有分区 umount -R /mnt # 重启 reboot4.5 首次启动排错遇到grub minimal bash like line editing is supported怎么办如果重启后没进 GRUB 菜单而是出现grub提示符别慌。这是 GRUB 找不到grub.cfg的典型症状。此时输入grub ls # 输出类似 (hd0) (hd0,gpt1) (hd0,gpt2) (hd0,gpt3) grub ls (hd0,gpt1)/EFI/ # 应该看到 ArchLinux/ BOOT/ grub ls (hd0,gpt1)/EFI/BOOT/ # 应该看到 BOOTX64.EFI grub ls (hd0,gpt2)/boot/grub/ # 应该看到 grub.cfg如果(hd0,gpt1)/EFI/BOOT/BOOTX64.EFI存在但grub.cfg不在(hd0,gpt2)/boot/grub/说明grub-mkconfig没成功。此时用grub configfile (hd0,gpt2)/boot/grub/grub.cfg临时加载然后进系统重跑grub-mkconfig。如果ls (hd0,gpt1)报错unknown filesystem说明 ESP 没格式化为 FAT32或grub-install没指定--efi-directory。必须重装。5. 常见问题与排查技巧实录来自 17 次真实安装的避坑清单过去一年我帮同事、朋友、论坛网友处理过 17 例移动硬盘 Arch 安装失败案例。以下是高频问题与独家解决方案按发生概率排序5.1 问题MacBook Pro 启动时黑屏只有 Apple Logo 闪烁现象插入移动硬盘按住Option键看到 “EFI Boot” 图标选中后屏幕变黑Apple Logo 闪烁 3 次后回到启动菜单。根因Mac 的 UEFI 固件对 USB 设备的电源管理过于激进ESP 分区的BOOTX64.EFI被加载后固件在切换到内核阶段时切断了 USB 供电。解决方案在grub.cfg的menuentry中linux行末尾添加usbcore.autosuspend-1参数。编辑/boot/grub/grub.cfg或修改/etc/default/grub后重生成linux /boot/vmlinuz-linux rootUUID... usbcore.autosuspend-1这个参数强制禁用 USB 自动休眠代价是移动硬盘待机功耗略高约 0.3W但换来 100% 启动成功率。5.2 问题Windows 11 电脑上启动卡在Loading initial ramdisk现象在 Dell OptiPlex 上GRUB 菜单正常显示选中 Arch 后屏幕停在Loading initial ramdisk ...光标不动。根因Windows 11 的 Secure Boot 默认启用而 Arch 官方内核未签名initramfs 加载时被拦截。解决方案不是关闭 Secure Boot不安全而是用sbctl工具签名内核。在 Arch 系统中pacman -S sbctl sbctl create-keys sbctl enroll-keys sbctl sign -s /boot/vmlinuz-linux sbctl sign -s /boot/initramfs-linux.img然后重启。sbctl会把密钥写入固件 NVRAM之后每次内核更新都要重新签名但这是唯一符合 Microsoft 安全规范的方案。5.3 问题移动硬盘在 Mac 和 Windows 上都显示为“本地磁盘”无法读写现象装完 Arch 后把移动硬盘插回 MacFinder 里显示为 “Untitled”双击提示 “磁盘未启用”插 Windows磁盘管理里显示 “RAW” 文件系统。根因/dev/sdc3home 分区用了 ext4而 macOS 和 Windows 原生不支持 ext4 读写。解决方案不要用 ext4 做 home 分区。改用 exFAT——它被 macOS 和 Windows 原生支持且 Arch Linux 通过exfat-utils和fuse-exfat可完美读写。格式化命令pacman -S exfat-utils fuse-exfat mkfs.exfat -n HOME /dev/sdc3然后在/etc/fstab中添加UUIDyour-home-uuid /home exfat rw,uid1000,gid1000,umask022 0 0注意uid和gid必须匹配你的用户 ID用id -u查否则文件权限会错乱。5.4 问题grub-install报错cannot find EFI directory现象执行grub-install --efi-directory/boot/efi ...时提示grub-install: error: cannot find EFI directory.根因/boot/efi目录存在但/dev/sdc1没挂载到它上面或者挂载时用了noauto选项。排查命令mount | grep efi # 看是否真的挂载了 ls -l /boot/efi # 看目录是否为空 lsblk -f | grep sdc1 # 看 sdc1 的 FSTYPE 是否为 vfat终极修复卸载后重新挂载并加-o umask0077umount /boot/efi mount -o umask0077 /dev/sdc1 /boot/efiumask0077确保只有 root 可读写 ESP防止 Windows/macOS 误删 EFI 文件。5.5 问题启动后网络无法获取 IPip a显示state DOWN现象系统启动成功但ping google.com失败ip a显示网卡状态为DOWN。根因NetworkManager 服务虽启用但默认不管理 USB 网卡如 Realtek RTL8153。解决方案编辑/etc/NetworkManager/NetworkManager.conf在[main]段落下添加[main] pluginskeyfile managedtrue然后重启服务systemctl restart NetworkManager nmcli device set enp0s20u1 managed yes # enp0s20u1 是 USB 网卡名用 ip a 查managedtrue强制 NM 管理所有网卡包括 USB 设备。注意以上所有问题我都整理成一张速查表贴在移动硬盘的标签纸上。每次新装系统前先扫一眼这张表能省下至少 40 分钟调试时间。真正的“高效”不是追求一步到位而是把重复踩过的坑变成可复用的经验资产。6. 后续优化与扩展让移动硬盘 Arch 真正成为生产力工具装完系统只是起点。要让它成为每天打开就用的生产力载体还需三步加固6.1 统一用户环境用rsync同步 dotfiles 到 home 分区我所有的开发配置.vimrc、.zshrc、VS Code 设置都托管在 GitHub 私有仓库。在移动硬盘 Arch 上我创建了一个同步脚本#!/bin/bash # ~/sync-dotfiles.sh cd /home/user/dotfiles git pull rsync -av --delete . /home/user/ --exclude.git --excludesync-dotfiles.sh每次启动后运行一次就能确保所有终端、编辑器、IDE 的配置与云端一致。关键是--exclude参数——排除.git目录防止冲突排除脚本自身避免无限循环。6.2 硬件加速支持Intel/AMD/NVIDIA 显卡驱动的一键适配移动硬盘 Arch 必须能跑图形界面。我用mhwdManjaro Hardware Detection工具简化驱动安装sudo pacman -S mhwd sudo mhwd -a pci nonfree 0300 # 自动检测并安装显卡驱动0300是 VGA 兼容控制器的 PCI 类代码mhwd会根据硬件型号自动选择video-linux开源、video-nvidia闭源或video-amdgpu-proAMD 专业版。比手动查型号、装包、配置 Xorg 配置文件快 10 倍。6.3 安全隔离用firewalld和fail2ban构建移动防火墙移动硬盘可能插在咖啡馆、机场的公共电脑上必须防范网络攻击。我启用firewalld并配置sudo systemctl enable firewalld sudo firewall-cmd --permanent --add-servicessh --remove-servicedhcpv6-client sudo firewall-cmd --reload只开放 SSH便于远程调试关闭 DHCPv6 客户端防止 IPv6 地址泄露。再装fail2bansudo pacman -S fail2ban sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local sudo systemctl enable fail2ban它会自动监控/var/log/auth.log对暴力 SSH 登录尝试封禁 IP。这些配置都保存在移动硬盘的/etc/下随系统一起迁移。最后分享一个小技巧在移动硬盘根目录放一个README.md文件用 Markdown 写明这台 Arch 的用途、管理员密码提示如 “密码是生日后四位Arch”、紧急恢复命令如grub configfile (hd0,gpt2)/boot/grub/grub.cfg。下次借给别人用或者半年后自己重装打开文件一看就明白——这才是真正可持续的移动系统。
返回列表