尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

银河麒麟V10SP2 U盘安装报错:设置基础软件仓库时出错排查

银河麒麟V10SP2 U盘安装报错:设置基础软件仓库时出错排查 1. 这个报错到底卡在哪一步U盘插上去引导菜单选好语言时区一路点下来眼看着就要进入软件包选择界面了屏幕突然弹出一行红字设置基础软件仓库时出错。下面是重试和退出两个按钮点重试还是同样的提示点退出就重启回到起点。这个场景我遇到过不止一次第一次碰上的时候足足折腾了一个下午最后发现根因简单得让人想笑。先把这件事说清楚银河麒麟服务器操作系统V10SP2在安装过程中基础软件仓库指的是安装程序用来读取软件包元数据repodata的那个来源。它既可以是本地光盘/U盘上的安装介质也可以是网络上的HTTP/FTP源或者是本地硬盘上的一个目录。安装器在进入软件包选择阶段之前必须先把这个仓库挂载好、解析出repomd.xml确认里面列出的包和依赖能用才会把包列表渲染出来给你勾选。这一步失败安装流程就走不下去。为什么会失败核心就一句话安装器找到的那个仓库位置跟实际存放软件包的位置对不上或者根本访问不到。听起来像废话但具体到U盘安装这个场景能导致这个结果的原因有好几种而且现象都是同一句报错需要逐个排除。这篇内容适合谁看正在用U盘给物理服务器或虚拟机装V10SP2、卡在这个报错上出不来的运维也适合平时用惯了其他Linux发行版、第一次接触麒麟服务器版安装流程的朋友。我会把排查顺序、每一步的命令、判断依据、以及我踩过的具体坑都写出来照着做基本能定位到问题。有一点需要先声明银河麒麟V10SP2的安装器界面在不同小版本、不同架构x86_64 / aarch64 / 飞腾 / 鲲鹏上细节会有差异但底层逻辑是一致的。我下面讲的排查思路对所有架构通用命令写法如果涉及架构差异我会单独标注。另外提前说一句最容易忽略的事V10SP2的服务器版安装介质官方提供的ISO有两种用途——一种是完整DVD版包含全部软件包一种是netinst网络安装版只含最小系统安装器。如果你下载的是网络安装版那么基础软件仓库这一步必须指向一个可访问的网络源或者本地完整仓库否则必然报错。很多人下载的时候没注意文件名后缀拿netinst当完整版用这一步就注定过不去。2. 制作U盘这一步埋下的雷大部分设置基础软件仓库时出错的根因其实在写U盘的时候就已经埋下了。安装器在读U盘时是按光盘镜像的目录结构去找仓库的如果你的U盘不是按这个结构组织的它就找不到。2.1 为什么不能直接把ISO复制进U盘这是新手最常犯的错。把ISO文件拖进U盘U盘里就只有一个Kylin-Server-V10-SP2-xxx.iso文件FAT32或exFAT格式。这种情况下有些主板能通过UEFI Shell或者某些引导程序加载ISO镜像但绝大多数情况下引导程序会直接把U盘当成一个普通存储设备而安装器在里面找/images/install.img、/repodata/repomd.xml这些路径自然全都找不到。镜像文件本身是一个光盘文件系统通常是ISO9660 Rock Ridge扩展的完整快照。它里面的目录结构是/ 根目录 ├── .discinfo ├── .treeinfo - 关键文件记录仓库位置 ├── EFI/ │ └── BOOT/ ├── images/ │ ├── install.img │ └── ... ├── isolinux/ ├── Packages/ - 所有rpm包 └── repodata/ - 包元数据 ├── repomd.xml └── ...只有当U盘的文件系统根目录能直接看到Packages/和repodata/安装器才有机会找到仓库。直接把ISO文件放进去等于在书架上放了一个装着书的箱子然后要求别人按书的页码直接翻翻不到。所以正确的做法有两种一是用工具把ISO烧录写盘到U盘让U盘本身的文件系统结构就是ISO里的结构二是把ISO完整解压到U盘根目录。这两种方式的区别后面会讲先说操作。2.2 写盘工具与命令的选择Windows下我一般用两个Rufus和balenaEtcher。Rufus在写入模式上要选对这个很关键写入模式说明适用场景DD镜像模式直接把ISO的字节流写入U盘U盘变成光盘的克隆推荐最不容易出仓库错误ISO镜像模式解压ISO内容再写入重建文件系统兼容性好但偶有目录丢失我实测下来用DD模式写入的U盘出现基础软件仓库报错的概率最低尤其是服务器主板。Rufus选择设备后点选择加载ISO然后写入模式那里选以DD镜像模式写入会弹一个确认框点确定就行。Linux下我更习惯命令行干净利落# 先确认U盘设备名千万别写错写错会毁掉系统盘 lsblk -o NAME,SIZE,TYPE,MOUNTPOINT # 假设U盘是 /dev/sdb先卸载所有已挂载分区 sudo umount /dev/sdb* 2/dev/null # 用dd写入of 后面跟的是整个设备不是分区 sudo dd ifKylin-Server-V10-SP2-Release-Build06-x86_64.iso of/dev/sdb bs4M statusprogress oflagsync # 写入完成后同步 sync注意of后面绝对不能带分区号如/dev/sdb1必须是整盘/dev/sdb。写错分区会导致U盘无法引导。执行前务必用lsblk反复核对设备名这是唯一一个写错就会造成数据损失的步骤。oflagsync这个参数我强烈建议加上。默认的dd是异步写命令返回时数据可能还在缓存里没落盘拔U盘的时候容易写入不完整。加上这个参数dd会等每次写操作真正落到设备再返回虽然慢一点但U盘的内容是完整可靠的。这个细节很多教程都不提但它是写入看似成功、实际引导出错这类玄学问题的常见来源。2.3 一个被忽略的点U盘容量与文件系统完整DVD版V10SP2的ISO大小通常在4GB到8GB之间不同架构和Build会有差异。这就带来一个问题FAT32单个文件最大4GB。如果你把ISO解压到FAT32的U盘上解压过程可能中途失败Packages/目录里的大包比如某些带固件的包会缺斤少两结果就是仓库元数据能读到但校验包的时候对不上。所以如果用解压到U盘的方式U盘文件系统必须是exFAT、ext4或者NTFSNTFS在部分老主板的UEFI下不一定被识别谨慎。而用DD写入的方式则不用担心这个因为整个U盘被ISO的文件系统覆盖了ISO9660本身没有单文件4GB的限制——虽然U盘的总容量不能小于ISO。我自己的习惯是准备一个16GB以上的U盘用DD方式写入一次到位不折腾解压。如果非要用解压方式比如需要在一个U盘里放多个镜像那就用exFAT格式化然后# 挂载ISO sudo mount -o loop Kylin-Server-V10-SP2-xxx.iso /mnt/iso # 复制全部内容到U盘挂载点注意要复制隐藏文件 sudo cp -a /mnt/iso/. /media/usb/ # 校验关键目录是否完整 ls /media/usb/repodata/repomd.xml ls /media/usb/Packages/ | headcp -a保留了权限和时间戳用.表示复制目录内所有内容包括隐藏文件。这一步比cp -r /mnt/iso/* /media/usb/更可靠因为后者不会复制.treeinfo、.discinfo这类以点开头的隐藏文件——而.treeinfo恰恰记录了仓库在镜像中的位置信息缺了它有些安装场景就会报仓库错误。这是我第二次踩坑时抓到的原因。3. 引导阶段要盯住的几个细节U盘做好了插到服务器上还有个环节容易出问题引导参数的传递。V10SP2的安装器在引导时会读取命令行参数其中跟仓库定位相关的参数如果不对一样报错。3.1 确认是从U盘而不是硬盘启动服务器主板一般有启动菜单快捷键华三、浪潮、超微、华为各有不同通常是F11、F12、F7、F2之一。如果服务器里已经装了系统BIOS的启动顺序里硬盘可能排在U盘前面你插了U盘它还是从老系统引导。这时候你会看到熟悉的GRUB菜单而不是安装界面有人以为是自己成功进了安装器结果进了个已装好的系统。判断方法很简单安装器的界面是图形化或文本模式的中文向导第一步就是选语言简体中文/English。如果看到的是一堆Linux发行版的启动项列表那说明是从硬盘引导了需要重启进BIOS调整启动顺序或者用启动快捷键手动选U盘。另外要注意UEFI和Legacy两种引导模式。V10SP2的安装介质两种都支持但一个U盘在UEFI模式下叫UEFI: 你的U盘名在Legacy模式下叫普通设备名。如果你在UEFI模式下装完之后在Legacy模式下想再进安装器可能就进不去反之亦然。建议统一用UEFI现代服务器基本都是UEFI。3.2 安装器引导菜单里的仓库相关选项在引导菜单就是显示Install Kylin Server V10那一屏按Tab或e可以编辑引导参数。默认参数里通常有一项是inst.repohd:LABELKylin-Server-V10-SP2-xxx:/或者在较新版本里是inst.repocdrom这里的设计逻辑是这样的安装器需要知道从哪读仓库。cdrom表示从光驱读但因为现在是从U盘装安装器会把U盘识别成一个类似cdrom的设备所以通常也能用。如果自动识别失败就需要手动指定。手动指定的语法在引导菜单按Tab追加到末尾# 从U盘的某个设备读用设备名 inst.repohd:/dev/sdb4:/ # 用卷标指定更稳妥因为设备名可能变 inst.repohd:LABELKYLIN:/ # 从网络仓库读 inst.repohttp://192.168.1.100/kylin-repo/设备名/dev/sdb4这种写法的问题在于服务器上多个USB设备或存储设备时U盘盘符可能不是sdb可能是sdc、sdd。所以优先用LABEL的方式因为卷标是写在文件系统里的不随插槽变化。怎么知道U盘的卷标在Linux下用lsblk -o NAME,LABEL能看到或者Windows下在此电脑里看。实操心得如果自动识别仓库失败与其在引导参数上反复试不如先退出来用Live环境或者另一台机器确认U盘上的repodata/repomd.xml确实存在、被正确读取。很多时候参数没错是U盘内容本身不完整改参数只是白费功夫。3.3 .treeinfo文件的角色前面提过.treeinfo这里展开说一下它为什么重要。这个文件是安装介质自带的目录索引内容大致长这样[general] name Kylin-Server-V10-SP2 [tree] arch x86_64 build ... platform ... variants Server ... [stage2] mainimage images/install.img [variant-Server] id Server name Kylin Server V10 SP2 packages Packages repository .安装器会读这个文件从中知道Packages在哪、install.img在哪。如果.treeinfo缺失或者内容不完整比如从U盘解压时截断了安装器就无从判断仓库位置报的就是设置基础软件仓库时出错。所以在任何时候检查U盘内容完整性.treeinfo和repodata/repomd.xml这两个文件都要能正常读取。4. 报错现场的四类真实原因与排查路径到这里前面讲的是预防。但如果现在屏幕已经卡在报错上了怎么快速定位是哪种原因我按实际碰到的概率从高到低排列并给出判断方法。4.1 原因一U盘写入不完整或结构不对这是最高频的。判断方法把U盘插到另一台Linux机器上直接挂载看根目录结构。# 假设U盘是 /dev/sdb挂载第一个分区 sudo mkdir -p /mnt/check sudo mount /dev/sdb1 /mnt/check ls -la /mnt/check/正常应该看到.treeinfo、Packages/、repodata/、images/等。如果看到的是Kylin-Server-V10-SP2-xxx.iso这么一个孤零零的文件那就石锤了——U盘是当普通存储用的没做成引导介质。解决重新用DD模式写盘。如果挂载时报错说unknown filesystem type可能U盘被写成了ISO9660但分区表不对或者写入时中断了。重新写一遍。我还遇到过一次更隐蔽的DD写入时用了默认的bs512命令跑得飞快因为没真正落盘拔U盘后写入不完整.treeinfo只写了一半。症状就是安装器能引导但一进仓库阶段就报错。加上bs4M statusprogress oflagsync并等待sync返回后再拔盘这个问题就没再出现过。4.2 原因二安装介质本身是netinst版判断方法看ISO文件名和大小。类型典型文件名特征大小仓库要求完整DVD版含DVD或dvd字样或体积大4-8GB自带完整仓库可直接装网络安装版含netinst或NetInstall500MB-1GB必须指定网络源最小化版含minimal1-2GB可能缺部分包组网络安装版的ISO里根本没有Packages/目录它的repodata只包含安装器自己需要的最少量包。你拿它离线装走到仓库那一步安装器想列软件包列表发现没有就报错了。解决下载完整DVD版重新制作U盘。在官网下载页看清楚描述别光看图快下小体积的那个。这是纯粹的选型问题不涉及任何技术难点但每年都有人栽在这上面。4.3 原因三引导参数指定了错误的位置有时候U盘内容完全正确但引导参数里sinst.repo或inst.repo被改成了别的路径。常见于做U盘的人为了适配某种特殊场景手动改过引导配置或者用了第三方修改版的镜像。判断方法在引导菜单按e或Tab展开参数逐项检查有没有inst.repo它的值指向哪里。如果是inst.repohttp://某个地址而你的环境根本不联网那就是它了。解决删掉错误的inst.repo参数或者改成正确的U盘位置# 改成从U盘本地读用LABEL最稳 inst.repohd:LABEL你的U盘卷标:/如果不知道卷标可以在无参数情况下先让安装器尝试自动检测很多时候它自己就能找到实在不行再手动指定。4.4 原因四USB控制器或存储设备识别异常这个原因最玄学但确实存在。部分服务器的USB 3.0控制器在特定固件版本下对U盘的识别有延迟或者不稳定安装器在仓库阶段去读U盘时设备掉线了一下读取中断就报错。现象特征重试按钮点几下有时候能过去有时候完全过不去U盘插在USB 2.0口上反而稳定。解决思路优先插主板后置的USB 2.0接口黑色避开前置面板和USB 3.0蓝色接口。这是老运维的土办法但对很多服务器立竿见影。如果服务器有iLO/iDRAC/BMC远程管理用虚拟介质挂载ISO代替物理U盘绕开USB控制器这一层。这个方法在数据中心场景里更常用稳定性也最好。在BIOS里关掉USB 3.0的XHCI模式改为EHCI部分主板支持能提升兼容性。我印象最深的一次是在一台老塔式服务器上U盘插前置口必报仓库错误换到后置USB 2.0口一次成功。当时还以为是U盘问题差点又重做一遍结果只是接口的锅。5. 从报错现场到成功进入的分步操作把上面的分析落地成一套可执行流程按顺序做基本能覆盖所有情况。5.1 第一步确认介质类型和完整性在动手重做U盘之前先花两分钟确认你手里的东西对不对。# 看ISO大小粗略判断是不是完整版 ls -lh Kylin-Server-V10-SP2-*.iso # 校验ISO的SHA256和官网公布的值对比 sha256sum Kylin-Server-V10-SP2-xxx.iso校验这一步别嫌麻烦。有一次我下载的镜像因为网络问题损坏了sha256sum跟官网差了几位制作出来的U盘能引导但文件是坏的报的就是仓库错误。重新下载后才正常。下载大文件一定要校验哈希值这是省时间的做法。5.2 第二步用DD模式重做U盘# 确认U盘设备 lsblk -o NAME,SIZE,TYPE,LABEL,MOUNTPOINT # 卸载U盘所有分区 sudo umount /dev/sdb1 /dev/sdb2 2/dev/null # DD写入加sync保证落盘 sudo dd ifKylin-Server-V10-SP2-xxx.iso of/dev/sdb bs4M statusprogress oflagsync sync # 写入完成后验证根目录有repodata sudo mount /dev/sdb1 /mnt/check ls /mnt/check/repodata/repomd.xml sudo umount /mnt/check注意DD写入会把U盘上所有原有数据清空做之前确认U盘里没有你还需要的文件。验证环节很关键不要写完直接拔走就去装在本地挂载看一眼repomd.xml在不在几秒钟的事能省掉后面半小时的排查。5.3 第三步正确引导并观察服务器上电插U盘到后置USB 2.0口按启动快捷键选U盘UEFI模式下选带UEFI前缀的那个。进入引导菜单后如果之前改过参数按e展开看一眼有没有异常的inst.repo没有就回车继续。安装器加载阶段会解压install.img这一步需要一点时间尤其U盘读写速度慢的时候耐心等不要以为卡死了就去拔U盘。加载完成后进入语言选择一路下一步。5.4 第四步仓库阶段的观察点走到安装源/软件仓库这一步时安装器会显示它检测到的仓库。如果自动检测成功你会看到仓库地址类似hd:/dev/sdb1或一个label。如果这一步直接报设置基础软件仓库时出错说明它没自动找到。这时候可以尝试手动指定在界面上通常有添加额外仓库或者选择安装源的输入框填入hd:LABEL你的卷标:/如果手动指定也不行那问题不在参数回到第二、四步重新检查介质和设备。5.5 第五步如果还是不行用网络仓库兜底假设U盘这条路彻底走不通比如服务器USB就是有毛病还有一条兜底路径把镜像里的仓库通过网络提供出来。在一台已经能用的Linux机器上# 挂载ISO sudo mkdir -p /mnt/kylin sudo mount -o loop Kylin-Server-V10-SP2-xxx.iso /mnt/kylin # 用HTTP服务把仓库暴露出去 sudo yum install -y httpd sudo mkdir -p /var/www/html/kylin sudo cp -a /mnt/kylin/. /var/www/html/kylin/ sudo systemctl start httpd sudo systemctl enable httpd # 防火墙放行如果开着 sudo firewall-cmd --add-servicehttp --permanent sudo firewall-cmd --reload然后在安装器的仓库地址里填http://那台机器的IP/kylin/这条路径的好处是完全绕开了U盘和USB控制器只要网络通就能装。缺点是得先有一台干净的Linux机器搭服务——不过在数据中心里这个前提几乎总是满足的。6. 几个容易忽略的细节和我的实操记录6.1 卷标里的空格和特殊字符如果你的U盘卷标是KYLIN SERVER这种带空格的在inst.repohd:LABEL后面直接写会导致参数解析断开安装器只认到KYLIN就去找找不到就报错。解决格式化U盘时把卷标设成没有空格、没有特殊字符的名字比如KYLINSP2。这个在Windows格式化和Linux的mkfs时都能设置。# Linux下重设卷标以ext4为例注意会清空数据 sudo mkfs.ext4 -L KYLINSP2 /dev/sdb16.2 多U盘同时插入的干扰服务器上如果同时插了两个U盘安装器可能从A盘引导但去B盘找仓库。现象是引导正常、仓库报错。排查方法就是拔掉所有其他USB存储设备只留安装U盘。这个坑我踩过当时服务器上还插着一个存日志的U盘忘了拔。6.3 用BMC虚拟介质更省事如果服务器有带外管理iLO、iDRAC、iBMC、IPMI强烈建议用虚拟介质功能直接把ISO挂给服务器相当于虚拟光驱。这样绕开了所有物理U盘的兼容性问题不用重做U盘远程就能完成安装。具体操作各厂商不同但核心都是登录BMC的Web界面找到虚拟介质/Virtual Media把本地ISO文件映射过去然后在服务器的启动菜单里选这个虚拟光驱。在有BMC的服务器上这是我现在的首选方式U盘反而成了备选。6.4 快速排查对照表把上面所有原因整理成表卡住的时候从上往下对照现象可能原因优先检查引导菜单都进不去U盘没做成引导盘用DD模式重写能引导选完语言就报仓库错U盘结构不对或netinst版检查根目录有无repodata确认ISO类型点重试偶发能过USB控制器不稳定换USB 2.0口或用BMC虚拟介质手动指定label也报错卷标写错或含空格核对卷标避免特殊字符网络源也报错网络不通或路径错先用浏览器访问仓库URL验证6.5 一个反直觉的验证技巧最后分享一个我常用的验证方法不要直接上服务器先在虚拟机里试一遍U盘。用VMware或者VirtualBox新建一个虚拟机把做好的U盘以物理磁盘方式直通给虚拟机VirtualBox的VBoxManage internalcommands createrawvmdk可以创建物理磁盘映射文件然后从它引导。如果虚拟机里能正常走到仓库那一步说明U盘本身没问题服务器上再报错就基本锁定是接口或控制器的问题如果虚拟机里也报同样的错那就是U盘内容或ISO本身的问题在虚拟机里排查比在服务器上重启来重启去快得多。这个方法的另一个好处是可以反复验证不用反复重启物理服务器。物理服务器每次重启、进BIOS、改启动顺序一来一回就是好几分钟在虚拟机上试错成本几乎为零。实际操作里我用这套流程解决过x86_64和aarch64两种架构上的同类问题根因分别是U盘写入不完整、ISO是netinst版、以及一次USB接口兼容性。三种原因对应三种处理方式但排查顺序是固定的先确认介质再确认引导参数最后怀疑硬件接口。按这个顺序走很少会绕远路。
返回列表