当前位置: 首页 > news >正文

Kali Linux安装全解析:UEFI/GPT适配、GRUB故障定位与三种部署场景

1. 这不是教你怎么点下一步,而是告诉你每一步背后在发生什么

Kali Linux 安装全攻略:3种方式+常见报错速查(新手不踩坑)——这句话里,“全攻略”三个字最容易被误解。很多人以为“全”是指覆盖所有硬件型号、所有BIOS设置、所有U盘制作工具的穷举式罗列;其实真正的“全”,是覆盖安装过程中每一个可观察、可验证、可干预的关键节点。我带过二十多期渗透测试入门班,几乎每届都有学员卡在“启动后黑屏几秒就回到UEFI菜单”,或者“安装界面能进,但选完磁盘就报错退出”,最后发现根本不是系统问题,而是USB 3.0接口供电不足导致U盘识别异常,换到主板后置USB 2.0口立刻解决。这类问题不会出现在官方文档里,但会真实消耗你三小时以上的排查时间。

这篇内容专为刚接触Linux安全生态的新手设计,尤其适合那些已经下载了kali-linux-2024.2-installer-amd64.iso、手边有台闲置笔记本或虚拟机、但还没敢点下“Install”的人。它不假设你懂GRUB、不预设你熟悉LVM分区逻辑、也不要求你背过efibootmgr命令——但它会带你真正看懂安装器界面上那个“Device for boot loader installation”下拉框里每个选项意味着什么,为什么选错了会导致重启后直接进不了系统;会解释“Guided - use entire disk”和“Manual”两种分区模式在物理磁盘上的实际写入差异;还会告诉你,当安装器弹出“Failed to install GRUB”时,92%的情况根本不是GRUB坏了,而是你当前启动模式(UEFI/Legacy)和目标磁盘分区表类型(GPT/MBR)不匹配。全文所有操作均基于Kali官方2024.2发行版实测,所有报错截图、日志片段、修复命令均来自真实安装现场,没有理论推演,只有可复现的动作链。

你不需要记住全部细节,但至少要建立一个判断框架:当安装中断时,先问自己三个问题——当前是UEFI还是Legacy启动?磁盘是否已初始化为对应分区表?安装器是否真的获得了对/boot/efi分区的写入权限?这三个问题的答案,能帮你绕开85%的“新手坑”。

2. 三种安装方式的本质区别:不是选择题,而是场景适配题

很多教程把“虚拟机安装”“物理机双系统”“裸机独占安装”并列成三种平行方案,这容易让人误以为它们只是安装路径不同。实际上,这三种方式对应着完全不同的系统控制粒度、硬件抽象层级和故障回滚成本。选错方式,不是多点几次“Next”,而是可能让整块SSD变砖、让Windows引导彻底消失、或在虚拟机里跑出无法复现的真实环境行为。下面拆解每种方式不可替代的核心价值与硬性前提。

2.1 虚拟机安装:唯一允许你“犯错”的沙盒

这是所有新手必须从这里起步的唯一理由:它提供了零硬件依赖、毫秒级快照回滚、完整I/O可控性三位一体的安全区。我建议用VirtualBox而非VMware Workstation,原因很实在:VirtualBox的Kali镜像兼容性经过Kali团队官方认证,其vboxadditions驱动对Kali内核版本更新响应更快;而VMware Tools在Kali 6.8+内核上曾出现过网络模块编译失败的问题,虽已修复,但新手遇到报错第一反应仍是怀疑自己操作失误。

关键配置项必须手动调整:

  • 内存分配不低于2GB(Kali桌面环境最低要求),但不要超过宿主机物理内存的50%,否则宿主机卡顿会影响你调试;
  • 硬盘类型选VMDK而非VDI,因为Kali安装器对VMDK的TRIM支持更稳定,避免后期apt upgrade时因磁盘空间计算错误导致包管理器崩溃;
  • 最易忽略的点:在“系统→处理器”中勾选“启用PAE/NX”,否则Kali内核启动时会报NX (No-Execute) protection not available警告,虽不影响使用,但会让新手误以为内核加载失败。

安装过程本身无技术难点,但有两个实操细节决定后续体验:

  1. 分区时务必选择“Guided - use entire disk”,不要碰“Manual”——虚拟机磁盘是逻辑块设备,手动分区极易因对齐错误导致IO性能下降,实测随机读写延迟可增加40%;
  2. 安装完成后立即关机,在VirtualBox设置中关闭“音频控制器”,Kali PulseAudio与VirtualBox音频子系统存在已知冲突,开启状态下会导致systemctl --user status pulseaudio持续报Failed to load module "module-suspend-on-idle"

提示:虚拟机安装的终极价值不在“能跑起来”,而在于它让你第一次看清Kali的启动流程链:从UEFI固件加载/EFI/kali/grubx64.efi,到GRUB解析/boot/grub/grub.cfg加载vmlinuz-6.8.0-kali1-amd64initrd.img-6.8.0-kali1-amd64,再到systemd初始化multi-user.target。这个链条里的每个环节,你都可以在虚拟机里用dmesg | grep -i "efi\|grub\|initrd"实时验证,这是物理机永远无法提供的调试透明度。

2.2 物理机双系统:在Windows阴影下争夺启动权

双系统不是“Kali + Windows”,而是“Windows Boot Manager vs GRUB2”的控制权博弈。绝大多数双系统失败案例,根源在于Windows的Fast Startup(快速启动)功能——它本质是Hybrid Shutdown(混合关机),会将内核会话保存到hiberfil.sys,导致NTFS分区处于“未安全卸载”状态。当你在Kali安装器里尝试挂载/dev/sda2(Windows C盘)时,安装器会静默跳过该分区,但不会提示原因,最终导致你误以为磁盘未被识别。

必须前置执行的操作:

  1. 在Windows中彻底禁用Fast Startup:控制面板→电源选项→选择电源按钮的功能→更改当前不可用的设置→取消勾选“启用快速启动”;
  2. 关闭BitLocker(如果启用),否则Kali安装器无法写入EFI系统分区;
  3. 最关键的一步:用Windows磁盘管理工具压缩C盘,腾出连续未分配空间(建议≥50GB),切勿用Kali安装器的“free space”自动分区——它调用的parted工具在NTFS边界识别上存在已知bug,曾导致某品牌笔记本的恢复分区被意外格式化。

分区策略采用“分离式EFI”:

  • /dev/sda1:EFI系统分区(ESP),大小500MB,FAT32格式,挂载点/boot/efi
  • /dev/sda2:Windows系统分区(保留原样);
  • /dev/sda3:Kali根分区,ext4格式,挂载点/
  • /dev/sda4:交换分区(swap),大小=物理内存,类型linux-swap

注意:不要将Kali的/boot/efi挂载到Windows的ESP(通常是/dev/sda1)上。虽然技术上可行,但Windows更新会重写该分区的/EFI/Microsoft目录,极大概率覆盖GRUB文件。正确做法是为Kali单独创建一个ESP,通过efibootmgr -c -d /dev/sda -p 5 -L "Kali" -l "\EFI\kali\grubx64.efi"手动注册启动项,这样Windows和Kali的EFI文件完全隔离。

2.3 裸机独占安装:回归Linux原生控制力的终极形态

当你的目标是红队演练、工控协议逆向或嵌入式固件分析时,虚拟机的CPU指令集模拟、网络栈抽象、USB设备直通延迟都会成为瓶颈。裸机安装不是“更高级”,而是“更真实”。但它的代价是:一旦安装失败,你将失去对整台设备的控制,必须依赖Live USB救援。

核心风险点在于磁盘控制器模式。现代主板默认启用Intel RST(Rapid Storage Technology)或AMD RAIDX,这是一种硬件+软件混合RAID,Kali内核默认不包含其驱动模块。如果你在BIOS中看到“SATA Mode”选项为“RAID”或“Intel RST”,必须改为“AHCI”——这不是简单切换,而是需要Windows端先行卸载RST驱动并修改注册表,否则Windows将蓝屏启动失败。具体步骤:

  1. 在Windows中以管理员身份运行CMD,执行bcdedit /set {current} safeboot minimal进入安全模式;
  2. 设备管理器中卸载“Intel Rapid Storage Technology”驱动;
  3. 重启进入BIOS,将SATA Mode改为AHCI;
  4. 再次启动Windows,系统会自动安装标准AHCI驱动。

分区方案放弃LVM(逻辑卷管理),采用经典三分区:

  • /dev/nvme0n1p1:EFI系统分区(500MB);
  • /dev/nvme0n1p2/根分区(30GB,ext4);
  • /dev/nvme0n1p3/home独立分区(剩余空间,ext4)。

这样设计的理由很务实:/home独立可避免重装系统时用户数据丢失,且Kali的/usr目录常驻大量工具二进制文件,与用户配置分离后,apt full-upgrade时IO压力更均衡。实测在NVMe SSD上,这种分区比单一分区方案提升约12%的apt install并发包解压速度。

3. 安装器底层机制拆解:为什么它总在“Copying files...”卡住?

Kali安装器(debian-installer)表面是图形界面,底层却是由debootstrapgrub-installsystemd等数十个独立工具链协同完成。当进度条停在“Copying files...”阶段超过5分钟,90%的情况并非网络或磁盘慢,而是某个子进程因权限或路径问题被阻塞。理解这个阶段到底在做什么,比盲目重启有效十倍。

3.1 “Copying files...”阶段的真实工作流

该阶段并非简单复制ISO文件,而是执行以下原子操作链:

  1. Stage 1:基础系统骨架构建
    debootstrap --arch amd64 kali-rolling /target http://http.kali.org/kali
    此命令从Kali镜像源下载base-filesdpkgapt等最小化包,解压到/target目录。关键参数--no-check-gpg被安装器默认启用,否则会因GPG密钥未导入而卡死。

  2. Stage 2:内核与initramfs注入
    安装器从ISO中提取/install/filesystem.squashfs,解压出预编译内核vmlinuz和初始内存盘initrd.img,复制到/target/boot/。此处易出错:若目标磁盘/boot分区未格式化为ext4(如误设为FAT32),cp命令会因文件系统不支持长文件名而静默失败。

  3. Stage 3:chroot环境初始化
    执行chroot /target /bin/bash -c "mount -t proc proc /proc && mount -t sysfs sysfs /sys",为后续apt install准备运行时环境。若/proc/sys挂载失败,后续所有包安装将报Unable to locate package错误。

  4. Stage 4:关键服务预配置
    运行/target/usr/lib/debian-installer/post-base-installer.d/01networking脚本,生成/target/etc/network/interfaces。若网络配置脚本中硬编码了不存在的网卡名(如eth0但实际是enp0s3),会导致systemd-networkd启动失败,但安装器不报错。

实测案例:某次安装卡在“Copying files...”第7分32秒,Ctrl+Alt+F2切到TTY2执行ps aux | grep debootstrap发现进程仍在运行,但iotop显示磁盘IO为0。进一步lsof -p <pid>发现其正在等待/target/dev/urandom的读取——原因是Live系统熵池耗尽。解决方案:在TTY2执行rng-tools5 -r /dev/hwrng(需先apt install rng-tools5),10秒后安装自动继续。这个细节永远不会出现在任何图文教程里,但它是真实发生的。

3.2 GRUB安装失败的七种根因与精准定位法

“Failed to install GRUB”是Kali安装器最著名的报错,但错误信息本身毫无价值。必须进入debug模式定位真实原因:

  1. 启动模式不匹配
    UEFI启动时尝试安装到MBR分区表磁盘:grub-install: error: this GPT partition label contains no BIOS Boot Partition
    解决:gdisk /dev/sda→ 输入n新建1MB BIOS Boot分区 → 类型代码ef02

  2. EFI系统分区未挂载
    grub-install: error: /boot/efi doesn't look like an EFI partition.
    检查:lsblk -f | grep -A5 "sda1"确认sda1是否为FAT32且挂载点为/boot/efi

  3. Secure Boot签名缺失
    UEFI Secure Boot启用时,grubx64.efi未被微软签名:grub-install: error: failed to get canonical path of '/boot/efi/EFI/kali'
    解决:BIOS中临时禁用Secure Boot,或使用sbupdate工具重签名

  4. ESP分区空间不足
    FAT32分区根目录文件数限制(通常≤65536),grub-install生成的grub.cfg及字体文件超出限额
    检查:df -h /boot/efi,若Use%>95%,需清理/boot/efi/EFI/Microsoft/Boot/旧日志

  5. 磁盘设备名动态变化
    安装器检测到/dev/sda,但chroot后变为/dev/nvme0n1grub-install找不到设备
    解决:在chroot中执行grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=Kali --recheck

  6. EFI固件Bug
    某些OEM主板(如戴尔XPS系列)的UEFI存在efivars接口缺陷,grub-install无法写入NVRAM
    临时方案:grub-install --no-nvram --efi-directory=/boot/efi

  7. 文件系统损坏
    ESP分区FAT32结构异常,grub-install校验失败
    修复:sudo mkfs.fat -F32 /dev/sda1(注意:此操作会清空ESP)

经验技巧:当遇到GRUB报错,第一时间按Ctrl+Alt+F2进入shell,执行journalctl -u grub-installer --no-pager查看完整日志。比反复重启看报错文字高效百倍。

4. 常见报错速查表:从现象到根因的映射关系

安装过程中的报错信息往往高度抽象,比如“Installation step failed”这种通用提示,对新手毫无指导意义。下面这张表不是罗列错误代码,而是按用户可观察现象分类,给出每种现象下最可能的3个根因、验证命令及修复动作。所有条目均来自2023-2024年Kali社区真实故障报告TOP100。

现象描述最可能根因验证命令修复动作
启动Live USB后黑屏,仅光标闪烁1. 显卡驱动未加载(NVIDIA/AMD专用GPU)
2. 内核参数缺少nomodeset
3. UEFI固件版本过旧(<2018)
`dmesggrep -i "drm|nouveau|amdgpu"<br>cat /proc/cmdline`
安装界面中“Detect and mount CD-ROM”失败1. ISO文件损坏(SHA256校验失败)
2. U盘写入工具未用DD模式(如Rufus选错“DD Image”)
3. USB控制器供电不足(USB3.0口带载能力弱)
sha256sum /cdrom/.disk/info
lsusb -t | grep -A5 "Class=Mass"
重新下载ISO并校验;用dd if=kali.iso of=/dev/sdb bs=4M status=progress写入;换USB2.0口或加USB集线器供电
分区步骤中看不到硬盘(/dev/sda未列出)1. RAID模式未关闭(Intel RST/AMD RAIDX)
2. NVMe驱动未加载(老内核不支持PCIe 5.0 SSD)
3. 磁盘被硬件加密(如某些企业级SSD)
lspci -k | grep -A3 "Storage|NVMe"
lsmod | grep -E "(nvme|ahci)"
BIOS中切换SATA Mode为AHCI;升级Kali内核至6.9+;联系SSD厂商获取解密工具
安装完成重启后直接进Windows,无GRUB菜单1. Windows Boot Manager优先级高于GRUB
2. GRUB未正确写入ESP分区
3. ESP分区被Windows更新覆盖
efibootmgr -v
ls /boot/efi/EFI/kali/
sudo efibootmgr -o 0001,0000(0001为Kali启动项);sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=Kalisudo cp -r /boot/efi/EFI/Microsoft /boot/efi/EFI/Microsoft.bak
安装后首次启动卡在“Started Hold until boot process finishes up.”1. systemd-networkd服务启动超时(DHCP未响应)
2. /etc/fstab中UUID错误导致挂载失败
3. initramfs未包含必要驱动(如btrfs)
systemctl status systemd-networkd
sudo blkid对比/etc/fstab
sudo systemctl disable systemd-networkdsudo nano /etc/fstab修正UUID;sudo update-initramfs -u

这张表的价值在于:它把模糊的“报错”转化为可执行的“诊断动作”。例如,当你看到“Started Hold until boot process finishes up.”,不必去网上搜长篇大论,直接执行systemctl status systemd-networkd,如果输出显示Activation timeout expired,就立刻知道是网络服务问题,而不是去怀疑硬盘或内存。

重要提醒:所有修复动作必须在chroot环境中执行。进入方法:安装失败后按Ctrl+Alt+F2sudo sumount /dev/sda3 /target(根据实际根分区调整)→mount --bind /dev /target/devmount --bind /proc /target/procmount --bind /sys /target/syschroot /target。这个序列必须完整,缺一不可,否则systemctl命令会报Failed to connect to bus

5. 安装后必做的五件事:让Kali真正可用,而非仅能开机

安装成功只是起点,Kali的“可用性”体现在工具链完整性、网络稳定性、硬件兼容性和安全基线。很多新手装完就急着跑nmap,结果发现nmap命令不存在——因为Kali默认安装的是kali-linux-core最小化元包,而非kali-linux-default全量工具集。下面这五件事,每一件都经过上百次真实环境验证,缺一不可。

5.1 工具集补全:按需安装,拒绝“全量轰炸”

Kali提供多个预定义元包,但kali-linux-everything(12GB+)对新手是灾难:它包含300+个工具,其中80%你永远用不到,却会拖慢apt update速度、增加系统攻击面、引发包冲突。正确策略是分层安装:

  • 基础层(必装)sudo apt install kali-linux-core
    包含aptcurlgitvim等系统必需工具,体积<500MB。

  • 工作流层(按方向选装)

    • 渗透测试:sudo apt install kali-linux-top10(Top 10工具:nmap, burpsuite, metasploit-framework等)
    • 无线审计:sudo apt install kali-linux-wireless(aircrack-ng, hcxdumptool等)
    • Web应用:sudo apt install kali-linux-web(sqlmap, gobuster, ffuf等)
  • 开发层(可选)sudo apt install kali-tools-exploitation(仅当需编写exploit时安装)

验证安装完整性:dpkg -l \| grep "^ii" \| wc -l应≥1200(core包基准),若<1000说明基础包未装全。

5.2 网络服务加固:关闭非必要监听端口

Kali默认启用rpcbindavahi-daemon等服务,它们监听0.0.0.0:1110.0.0.0:5353等端口,构成隐蔽攻击入口。实测某次CTF比赛中,选手因未关闭avahi,被对手通过.local域名解析探测到主机名及内网IP,直接绕过防火墙。

关闭命令链:

sudo systemctl stop rpcbind avahi-daemon sudo systemctl disable rpcbind avahi-daemon sudo ufw default deny incoming # 启用UFW防火墙 sudo ufw allow OpenSSH # 仅开放SSH sudo ufw enable

注意:ufw规则在重启后持久生效,但systemctl disable仅禁用服务开机自启,需手动stop一次才能立即生效。这是新手常漏的一步。

5.3 时间同步校准:避免证书验证失败

Kali Live系统时间常严重偏差(因未连接NTP),导致curl https://google.comSSL certificate problem: clock skew detected。这不是证书问题,而是系统时间比UTC快/慢超过3分钟。

校准命令:

sudo timedatectl set-ntp true sudo systemctl restart systemd-timesyncd timedatectl status | grep "System clock synchronized"

必须看到System clock synchronized: yes才表示校准成功。若仍为no,手动指定NTP服务器:sudo nano /etc/systemd/timesyncd.conf→ 取消注释NTP=行并设为NTP=pool.ntp.org

5.4 用户权限精简:删除root密码,启用sudo免密(仅限可信环境)

Kali默认root用户有密码,这违背最小权限原则。正确做法是:

  1. 创建普通用户:sudo adduser kaliuser
  2. 加入sudo组:sudo usermod -aG sudo kaliuser
  3. 禁用root登录sudo passwd -l root
  4. 配置sudo免密(仅限实验室环境):echo "%sudo ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/nopasswd

警告:第4步绝对不可用于联网的生产环境!它仅适用于离线靶场或虚拟机实验。真实红队作业中,sudo密码策略必须符合客户安全规范。

5.5 内核参数优化:解决USB设备识别率低问题

Kali内核默认usbcore.autosuspend=-1(禁用USB自动休眠),但某些USB WiFi网卡(如Alfa AWUS036NHA)在高负载下仍会断连。实测有效参数:

echo 'options rtl8187 usbcore.autosuspend=-1' | sudo tee /etc/modprobe.d/rtl8187.conf sudo modprobe -r rtl8187 && sudo modprobe rtl8187

此操作强制RTL8187驱动禁用USB电源管理,将WiFi断连率从37%降至0.2%。其他芯片需替换rtl8187为对应驱动名(lsmod | grep 80211可查)。

6. 我的个人经验:那些没写在手册里的“手感”

写了这么多技术细节,最后想分享几个无法量化、但决定你能否真正驾驭Kali的“手感”。这些不是步骤,而是多年踩坑后形成的条件反射。

第一个是对安装器进度条的耐心阈值。Kali安装器在“Configuring apt”阶段会卡住2-3分钟,因为它在后台执行apt-get update并下载软件包索引。此时切忌狂按回车或重启——我见过太多人因此中断安装,导致/var/lib/dpkg/status文件损坏,重装后apt命令直接报E: dpkg was interrupted。正确做法是安静等待,同时观察右上角CPU使用率:若htop显示apt进程CPU占用>80%,说明它在正常工作;若CPU为0%,再考虑介入。

第二个是对错误日志的“气味识别”能力。比如看到grub-install: error: cannot find a GRUB drive for /dev/sda,第一反应不该是百度,而是执行sudo fdisk -l /dev/sda看分区表类型,再执行ls /sys/firmware/efi确认是否UEFI启动。这种“现象→命令→结论”的肌肉记忆,比记住一百个报错代码更有价值。

第三个是对硬件兼容性的敬畏心。Kali不是万能的,它对某些新硬件(如2024款MacBook Pro的M3芯片、部分国产信创平台)支持滞后。当安装反复失败时,与其熬夜调试,不如先查Kali官网的 Hardware Compatibility List ,或改用更激进的Arch Linux + Kali工具仓库。有时候,选择正确的战场,比在错误的战场上死磕更重要。

最后一点,也是最重要的一点:永远保留一份可启动的Live USB。我办公桌抽屉里常年放着3个不同日期的Kali Live USB,标签写着“2024.1 Rescue”、“2024.2 Forensics”、“2024.3 ARM64”。它们不是备用,而是我的数字急救包——当系统崩溃、引导损坏、甚至/boot分区被误删时,插上它,5分钟内就能重建工作环境。这种确定性,是任何教程都无法赋予的,只能靠一次次亲手实践来获得。

http://www.jsqmd.com/news/881465/

相关文章:

  • 量子纠错技术:从理论到实践的突破
  • SSH、SNMP、NETCONF、SFTP
  • 刚出炉的 Codeforces Round 1100 B 题:一眼像交换,实则一行贪心公式
  • crypto-js Malformed UTF-8 data 报错根源与字节级修复方案
  • 数据结构——AVL二叉平衡树
  • 对抗性多臂老虎机与EXP4算法:原理、实现与实战调优
  • 中兴光猫工厂模式终极解锁:3分钟掌握免费高效管理工具
  • 用 AI 生成接口文档和测试用例:比“问一句答一句”更适合程序员的会员用法
  • 渗透测试信息收集四层穿透模型与实战流水线
  • Kubernetes准入控制器:在资源创建前进行安全检查
  • 阿里云ECS CPU 100%排查:5分钟定位挖矿病毒的原生命令链
  • easysearch 安装
  • 告别apt-key时代:深入理解Ubuntu软件源密钥管理机制变迁与最佳实践
  • Android高版本HTTPS抓包终极方案:Magisk+MoveCert证书迁移
  • NsEmuTools:终极NS模拟器自动化管理完整指南
  • AArch64虚拟内存系统架构与硬件辅助转换表更新机制
  • 深入理解C语言 islower 函数详解:判断字符是否为小写字母
  • CCFast 驰骋低代码BPM-积木菜单设计思想
  • 低代码开发的招聘管理系统实际运行数据和效果究竟如何?
  • 图像数据质量自动化评估与清洗:从CleanVision到自适应阈值实战
  • Unity C# Partial类实战:解耦大型项目架构的核心技术
  • 基于CNN的欧几里得望远镜双活动星系核智能探测方法与实践
  • PyTorch零基础保姆级安装与测试教程
  • DVWA与Pikachu双靶场协同部署:宝塔+PHPStudy双环境实战指南
  • 足底压力数据异常检测:SPM统计方法与可解释机器学习对比实践
  • oauthd:轻量级开源OAuth2.0授权中心与企业权限治理实践
  • Linux网络编程基础(地址结构)
  • 机器学习加速等离子体仿真:从初始条件预测到PIC计算效率提升
  • 2026年4月目前有名的校车回收公司推荐,五菱校车/旧校车/宇通二手校车/窄车身幼儿校车/福田校车,校车供应商推荐 - 品牌推荐师
  • 机器人异常检测实战:基于系统日志的LR、SVM与自编码器模型对比