无人职守自动安装linux操作系统

无人职守自动安装linux操作系统

    • 1. 大规模部署案例
    • 2. PXE 技术
    • 3. Kickstart 技术
    • 4. 配置安装服务器
      • 4.1 DHCP服务
      • 4.2 TFTP 服务
      • 4.3 NFS服务
    • 5. 示例
      • 5.1 搭建server
        • 1. 启动dhcp并设为开机自启
        • 2. 设置并启动tftp
        • 3. 将客户端所需启动文件复制到TFTP服务器
        • 4. 创建Kickstart自动应答文件
        • 5. 部署NFS服务
        • 6. 将系统光盘或ISO文件通过NFS共享
      • 5.2 客户端
        • 1. 设置虚拟机
        • 2. 启动安装
    • 6. 问题汇总
      • 1. 卡在dracut
      • 2. 卡在没有选择磁盘
      • 3. 卡在DHCP分配地址
      • 4. tftp open timeout
      • 5. 服务端缺少pxelinux.0
      • 6. 服务端缺少指定内核的配置文件
      • 7. 提供ks.cfg文件的服务宕机
      • 8. 客户机内存不够

1. 大规模部署案例

当组织有服务器需要部署linux系统时,需要通过网络方式安装并结合自动应答文件,实现无人职守自动安装部署操作系统。这种方式需要我们至少配置一台服务器,所有需要安装系统的客户端通过网络的方式连接服务器端启动安装程序,再根据服务器中存放的自动应答文件实现大规模自动安装部署系统。整个环境的拓扑结构:

在这里插入图片描述
这种无人职守的解决方案需要提前部署一台包含DHCP、TFTP和NFS等服务器的安装服务器。

在这里插入图片描述

安装部署流程:

  • 客户端首先需要在BIOS中设置通过网络启动
  • 当客户端启动后,会通过发送广播包的方式寻找DHCP服务器
  • 当找到DHCP服务器,即可向该服务器申请获得包括IP地址在内的网络参数等,并通过DHCP获得TFTP的位置
  • 当客户端获得TFTP服务器的地址后,即可从TFTP服务器上将启动文件下载至本机内存并运行,最终实现无盘启动的功能
  • 我们可以在启动文件中设置Kickstart文件的共享的位置,这样客户端启动后,即可自动寻找Kickstart文件实现无人职守安装系统

注意:Kickstart文件需要事先通过网络共享,在Kickstart文件中描述了如何安装设置操作系统、运行部署脚本等

2. PXE 技术

PXE( preboot execute environment)是由Intel公司开发的基于C/S(客户端/服务器)模式的一种技术,其核心功能让客户端通过网络从远端服务器下载启动镜像,从而实现网络启动。整个过程中,客户端要求服务器分配IP地址,再用TFTP协议下载位于服务器上的启动镜像到本机内存中并执行,由这个启动文件完成客户端软件的设置。

  1. pxe client必须支持pxe用户端功能,并且开机时选择网络启动,才能确保以网络的方式进入pxe启动程序;
  2. pxe server必须至少提供DHCP、TFTP、HTTPD(vsftpd 或 nfs)的服务,且还需满足如下要求:
    • DHCP服务器除了必须满足为pxe client分配ip地址之外,还需告知tftp所在的位置(即告诉pxelinux.0的文件位置)
    • TFTP服务器则为pxe client 提供bootloader 及 kernel 等重要文件下载服务
    • 使用httpd/vsftpd/nfs服务器提供pxe client所需程序及软件来源(共享源)

当读取安装程序进入安装界面后,剩余的步骤,如语言设置、系统管理员密码、网络参数等参数还需要我们手动设置,至此,我们仅可以实现无盘网络启动,若要实现无人职守自动安装,还需要Kickstart技术

3. Kickstart 技术

Kickstart 安装是目前主要的一种无人职守自动部署安装操作系统的方式。这种技术的核心是自动应答文件(Kickstart文件),即将本来在安装过程中需要我们手动设置的语言、密码和网络参数等,通过读取自动应答文件实现自动设置。所以,我们需要事先将对操作系统的设置写入自动应答文件,开始安装操作系统时,指定安装程序读取自动应答文件实现自动安装及部署操作系统。

Kickstart文件可以通过三种方式生成:

  • 手动书写(仅需要一个文本编辑工具即可)
  • 通过system-config-kickstart图形工具
  • 通过红帽的安装程序 Anaconda 自动生成

本文以system-config-kickstart图形工具为主,介绍如何生成一份自动应答文件,具体步骤如下

注意该系统需要有桌面,否则无法启动该图形工具

首先安装system-config-kickstart图形工具,命令如下:

yum install system-config-kickstart.noarch

安装完成后,输入system-config-kickstart运行该工具
在这里插入图片描述
我们可以通过图形界面进行系统基本设置、安装方式管理、启动方式配置、分区配置、网络配置、认证配置、防火墙设置、显示配置、安装包配置。除此之外,还可以编写系统安装前及安装后所需运行的脚本。

4. 配置安装服务器

最终要实现无人职守自动安装部署操作系统,需要提前定制安装服务器,其中包括:DHCP、TFTP及NFS服务。

4.1 DHCP服务

DHCP服务器主要实现在企业内部网络为客户端分配IP地址等网络参数。在我们无人职守环境中,当客户端选择从网络启动后,就会通过发送广播数据包的形式寻找DHCP服务器,从DHCP获得IP地址等参数后才可以通过TFTP共享读取启动文件,简单步骤如下:

  1. 安装DHCP服务
[root@localhost ~]# yum install -y dhcp
  1. 修改配置文件
    其主要配置文件为/etc/dhcp/dhcpd.conf,以下为简单配置样本:
[root@node-139 ~]# cat /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example
#   see dhcpd.conf(5) man page
subnet 192.168.0.0 netmask 255.255.0.0 {interface "ens34";range 192.168.17.202 192.168.17.240;option domain-name-servers 8.8.8.8;option routers 192.168.17.1;default-lease-time 600;max-lease-time 7200;next-server 192.168.17.139;filename "pxelinux.0";}

该文件中,

  • subnet 指为哪个网段分配网络参数,
  • range设置为客户端分配的IP地址池,这个可以分配客户端分配从192.168.17.201192.168.17.240之间的IP地址。
  • domain-name-servers设置为客户端分配的DNS服务器地址,
  • routers设置为客户端分配的网关地址。
  • 对网络启动至关重要的参数是next-server和filename,从安装部署流程可以看出,客户端启动计算机通过DHCP获得IP地址后,还需要从TFTP下载启动文件,而next-server设置的即TFTP服务器的地址,filename设置的是在该TFTP文件服务器上共享的启动文件名称,客户端通过这两个参数连接TFTP服务器,并从中下载启动文件

可以拷贝/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example进行修改,或者手动编写

4.2 TFTP 服务

TFTP服务器为客户端提供一种简单的文件共享,它不具备FTP那样丰富的功能。由于其简单的设计,TFTP非常适用于传输小且简单的PXE启动文件。

  1. 安装TFTP服务
[root@localhost dhcp]# yum install -y tftp-server
  1. 修改配置文件
    默认的配置文件为/etc/xinetd.d/tftp。该文件中,disable默认值为yes,也就是说,该服务默认为禁用状态,需要手动修改为no来启动服务。该配置文件中server_args的值定义了共享的目录,也就是我们共享的文件要存放的路径。
service tftp
{socket_type             = dgramprotocol                = udpwait                    = yesuser                    = rootserver                  = /usr/sbin/in.tftpdserver_args             = -s /var/lib/tftpbootdisable                 = yesper_source              = 11cps                     = 100 2flags                   = IPv4
}

4.3 NFS服务

NFS是Network File System的简写,即网络文件系统。NFS服务的特点是服务器配置简单,客户端通过网络访问NFS文件系统就像访问自己的本地磁盘一样方便。这里使用它作为CentOS系统文件的共享服务平台,当客户端从网络启动正式进入安装界面后,还需要读取CentOS光盘中的系统文件,以完成最后的安装。这些文件就是通过NFS共享给网络用户。linux默认安装NFS系统,可以通过修改配置文件提供共享文件。

  1. 启动服务
[root@localhost dhcp]# systemctl start nfs-server
[root@localhost dhcp]# systemctl status nfs-server
● nfs-server.service - NFS server and servicesLoaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)Active: active (exited) since Mon 2023-12-25 22:17:18 CST; 2s agoProcess: 78263 ExecStartPost=/bin/sh -c if systemctl -q is-active gssproxy; then systemctl reload gssproxy ; fi (code=exited, status=0/SUCCESS)
  1. 修改配置文件
    默认配置文件为/etc/exports,该文件的内容默认为空
[root@localhost dhcp]# cat /etc/exports
/media  192.168.0.0/255.255.0.0(ro)

样本文件中编写了共享了/media目录,后面的IP地址表示仅192.168.0.0网络可以访问该共享目录,ro表示客户端访问权限为只读。

这里共享镜像还可以使用vsftpd或者httpd作为替代方案

5. 示例

我们尝试搭建一个自动化安装部署操作系统的模拟案例,使用的操作系统及安装系统均为Centos7。

服务器IP安装服务
server192.168.17.139dhcp,tftp,nfs
client1192.168.17.201(计划)
client2192.168.17.202(计划)

5.1 搭建server

在前文中,我们在server已经安装了dhcp,tftp,nfs,并通过Kickstart 技术生成自动应答的相关文件

1. 启动dhcp并设为开机自启
[root@node-139 ~]# systemctl start dhcpd
[root@node-139 ~]# systemctl enable dhcpd
Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpd.service to /usr/lib/systemd/system/dhcpd.service.
2. 设置并启动tftp
[root@node-139 ~]# cat /etc/xinetd.d/tftp
# default: off
# description: The tftp server serves files using the trivial file transfer \
#       protocol.  The tftp protocol is often used to boot diskless \
#       workstations, download configuration files to network-aware printers, \
#       and to start the installation process for some operating systems.
service tftp
{socket_type             = dgramprotocol                = udpwait                    = yesuser                    = rootserver                  = /usr/sbin/in.tftpdserver_args             = -s /var/lib/tftpbootdisable                 = noper_source              = 11cps                     = 100 2flags                   = IPv4
}
[root@node-139 ~]# systemctl start tftp
[root@node-139 ~]# systemctl status tftp
● tftp.service - Tftp ServerLoaded: loaded (/usr/lib/systemd/system/tftp.service; indirect; vendor preset: disabled)Active: active (running) since Mon 2023-12-25 23:44:38 CST; 3s agoDocs: man:in.tftpdMain PID: 85504 (in.tftpd)Tasks: 1CGroup: /system.slice/tftp.service└─85504 /usr/sbin/in.tftpd -s /var/lib/tftpbootDec 25 23:44:38 node-139 systemd[1]: Started Tftp Server.

共享路径为/var/lib/tftpboot

3. 将客户端所需启动文件复制到TFTP服务器
[root@node-139 ~]# yum install -y syslinux
[root@node-139 ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

把内核镜像文件vmlinuzisolinux.cfginitrd.img拷贝到共享路径

initrd.img文件就是个ram disk的映像文件。ram disk是标准内核文件认识的设备(/dev/ram0)文件系统也是标准内核认识的文件系统。可以参考 https://blog.csdn.net/u010230019/article/details/131450815
isolinux.cfg启动菜单的配置文件

[root@node-139 tftpboot]# cp /home/yurq/isolinux.cfg pexlinux.cfg/default
[root@node-139 tftpboot]# chmod 644 pexlinux.cfg/default
[root@node-139 tftpboot]# ll pexlinux.cfg/default
-rw-r--r--. 1 root root 3032 Dec 25 23:59 pexlinux.cfg/default

修改启动配置文件default(isolinux.cfg)

[root@node-139 tftpboot]# cat pexlinux.cfg/default
default linux
timeout 600display boot.msgmenu title Welcome to CentOS7 by Yurqlabel linuxmenu label ^Install CentOS 7menu defaultkernel vmlinuzappend initrd=initrd.img ks=nfs:192.168.17.139:/ks/ks.cfglabel rescuemenu label ^Rescue a CentOS systemkernel vmlinuzappend initrd=initrd.img rescuemenu end

配置说明:default 指定默认引导方式,从配置文件可以看出,有一种以label开始的名称为linux的正常引导方式,另一种是名称为rescue的救援引导方式,而default决定了默认采用哪种引导方式引导安装程序。此外,kernel指定的是系统内核文件,在上面的步骤中,我们已将该文件复制到TFTP共享目录中。如果没有后面的ks参数,至此,我们可以实现无盘启动,后面的安装步骤需要我们手动进行,设置ks参数可以指定自动应答文件的位置,从而实现无人职守自动安装。本文中设置192.168.17.139的NFS共享方式读取Kickstart文件。

[root@node-139 ~]# ll /var/lib/tftpboot
total 60480
-rw-r--r--. 1 root root 55129656 Dec 25 23:56 initrd.img
-rw-r--r--. 1 root root    26759 Dec 25 23:47 pxelinux.0
drwxr-xr-x. 2 root root       21 Dec 26 23:08 pxelinux.cfg
-rw-r--r--. 1 root root  6769256 Dec 25 23:56 vmlinuz

重启TFTP服务,并关闭防火墙

[root@node-139 tftpboot]# systemctl restart tftp
[root@node-139 tftpboot]# systemctl stop firewalld
4. 创建Kickstart自动应答文件
  1. 基本设置
    在这里插入图片描述
    包括:默认语言,键盘,时区,root密码(可选)

  2. 设置安装方法
    在这里插入图片描述
    配置安装方式可以选择全新安装或者升级安装,本文中为全新安装,设置安装过程中所需安装文件(Centos7 系统光盘中的内容)通过NFS读取,这里的NFS服务器为192.168.17.139,共享目录为/media

  3. 引导设置
    在这里插入图片描述
    此处配置系统引导程序,安装方式选择全新安装GRUB引导程序,GRUB引导密码未设置,将系统引导程序安装于MBR区域,内核参数未设置任何特殊参数

  4. 分区设置
    在这里插入图片描述
    分区选择移除所有的现有分区后重新分区,并初始化磁盘标签

注意:通过图形界面生成的Kickstart文件无法使用LVM逻辑卷分区,需要使用LVM逻辑卷分区,则需要手动修改生成后的Kickstart文件

这里需要手动添加(ADD)至少//boot

  1. 网络设置
    在这里插入图片描述
    添加网络设备ens33,并设置通过DHCP获得网络参数
  2. 认证设置
    在这里插入图片描述
    所有的用户密码都使用SHA512算法加密

如果需要将本机加入活动目录的化,可以修改LDAP参数加入活动目录

  1. SELinux和防火墙
    在这里插入图片描述
    SELinux和防火墙均被设置为激活状态,并设置防火墙开放HTTP和SSH服务

  2. 显示设置
    在这里插入图片描述
    这里不勾选安装图形环境(可自行选择)

  3. 安装包选择
    在这里插入图片描述
    正常可以选择,笔者这里可能是版本问题没有显示内容
    在这里插入图片描述
    安装软件时根据自己实际需求进行选择

    后来笔者构建本地源,不过可选内容较少,可能导入的是mini.iso的原因
    在这里插入图片描述
    构建本地源,需要注意源名称必须为development,因为这个是ks代码内固定读取的:

    [development]
    name=centos cdrom
    baseurl=file:///media/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    enabled=1
  4. 安装前执行脚本
    在这里插入图片描述
    若没有特殊需求,可以为空

  5. 安装后运行的脚本
    在这里插入图片描述
    常用脚本为创建YUM源,初始化用户账号,部署软件服务等,如果没有特殊需求,可以为空

完成所有设置后,通过File菜单选择Save,即可保存生成Kickstart文件,本文中将其保存至/ks/目录中,取名为ks.cfg

[root@node-139 ~]# cat /ks/ks.cfg
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
keyboard 'us'
# Root password
rootpw --iscrypted $1$2ZdAsgIv$xBtWTquTEb5prUaMEgk.G/
# System language
lang zh_CN
# System authorization information
auth  --useshadow  --passalgo=sha512
# Use graphical install
graphical
firstboot --disable
# SELinux configuration
selinux --enforcing# Use NFS installation media
nfs --server=192.168.17.139 --dir=/media# Firewall configuration
firewall --enabled --http --ssh
# Network information
network  --bootproto=dhcp --device=ens33
# Halt after installation
halt
# System timezone
timezone Africa/Abidjan
# System bootloader configuration
bootloader --location=mbr --boot-drive=sda
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part swap --fstype="swap" --size=1000
part /boot --fstype="ext4" --size=200
part / --fstype="ext4" --grow --size=1%post
/usr/bin/hostname yurq
%end%packages
@core%end

注意:bootloader --location=mbr --boot-drive=sda 默认用图形工具编写完成没有--boot-drive=sda 这个选项,所以需要手动加上
否则会卡在anaconda的配置界面

5. 部署NFS服务

修改NFS服务如下,

[root@node-139 ~]# cat /etc/exports
/ks     192.168.0.0/255.255.0.0(ro)
/media  192.168.0.0/255.255.0.0(ro)

启动NFS并设置为开机自启

[root@node-139 ~]# systemctl start nfs
[root@node-139 ~]# systemctl enable nfs
6. 将系统光盘或ISO文件通过NFS共享

如果有光盘或光驱可以通过mount的方式将光盘直接挂载在/media目录下

umount /dev/cdrom
mount /dev/cdrom /media

如果没有光盘,仅有ISO镜像文件,亦可以将ISO镜像文件挂载至/media目录,

[root@node-139 ~]# mount -o loop -t iso9660 /root/CentOS-7-x86_64-Minimal-2009.iso /media
mount: /dev/loop0 is write-protected, mounting read-only
[root@node-139 ~]# ll /media/
total 110
-rw-r--r--.  2 root root    14 Oct 30  2020 CentOS_BuildTag
drwxr-xr-x.  3 root root  2048 Oct 27  2020 EFI
-rw-rw-r--. 15 root root   227 Aug 30  2017 EULA
-rw-rw-r--. 15 root root 18009 Dec 10  2015 GPL
drwxr-xr-x.  3 root root  2048 Oct 27  2020 images
drwxr-xr-x.  2 root root  2048 Nov  3  2020 isolinux
drwxr-xr-x.  2 root root  2048 Oct 27  2020 LiveOS
drwxr-xr-x.  2 root root 73728 Nov  3  2020 Packages
drwxr-xr-x.  2 root root  4096 Nov  3  2020 repodata
-rw-rw-r--. 15 root root  1690 Dec 10  2015 RPM-GPG-KEY-CentOS-7
-rw-rw-r--. 15 root root  1690 Dec 10  2015 RPM-GPG-KEY-CentOS-Testing-7
-r--r--r--.  1 root root  2883 Nov  3  2020 TRANS.TBL

至此服务器端就设置好了

5.2 客户端

正常来说,在所有客户端主机的BIOS中,将第一启动方式设置为PXE网络启动,或通过类似于开机按F12键这样的快捷方式设置启动方式。不同型号的主机设置网络启动的方式不同,用户可自行选择。

本文中使用虚拟机模拟真实场景,所以还需要设置虚拟机

1. 设置虚拟机

在这里插入图片描述
由于笔者的服务器是双网卡,所以指定客户端机器未仅主机模式,读者可自行选择,能让DHCP分配到IP就可以了
另外,双网卡需要注意在DHCP设置时指定interface

2. 启动安装

在这里插入图片描述

在这里插入图片描述
由于镜像是mini版本的,所以只有命令行界面
在这里插入图片描述

6. 问题汇总

1. 卡在dracut

dracut 是一个事件驱动的 initramfs 基础设施。dracut(工具)被用来通过拷贝工具和文件,从一个已经安装的系统创建一个 initramfs 镜像,并将镜像与dracut框架结合在一起。通常发现在 /usr/lib/dracut/modules.d/.

  • 不像已经存在的initramfs框架,dracut的框架尝试有尽可能更少的硬编码进入initramfs。initramfs在生命中有一个基本的目标:获取已经挂载的rootfs,以致我们能够过渡到真正的rootfs。这是所有驱动装置的可用性。因此,取代脚本硬编码去做各种事情,dracut的 initramfs 依赖 udev 去创建符号链接到设备节点,接着,当rootfs的设备节点出现的时候,它被挂载和根切换到rootfs设备。 这个有助于保持在initramfs里要求的时间尽可能的少,以致一些事情,如5s钟启动,作为一个initramfs的存在结果不是不可能的。
  • 在dracut中,大部分的initramfs生成器功能由一群生成模块提供,这些模块是被主要的dracut工具采购,来安装特定的功能进入initramfs。他们存在于这些模块的子目录。和使用由dracut-functions提供的功能去做他们的工作。
  • dracut 作为新一代的 initramfs 系统,和前一代的initramfs系统的 mkinitrd 的不同点在于, dracut设计上就考虑到了映像尺寸的问题,尽量避免硬编码,以提高生成的 cpio 映像载入内存的速度。实际上,由于initramfs的唯一作用就是挂载rootfs(因此不需要把一堆无用的比如 plymouth 等都装进去),它主要依赖 udev 去获取 rootfs 的设备节点,一旦 rootfs 节点出现则立刻切换过去。按照官方维基的说法:5秒启动不是梦。另外它采用了模块化的方式,使用者可自由在 %{_libdir}/dracut/modules.d 下创建他需要的特殊模块,可扩展性很强。最后它的使用方式和 mkinitrd 非常接近,迁移成本较低。

dracut 用于制作initrd启动镜像文件, dracut-network会为镜像内添加nfs等网络支持.

  1. 镜像未挂载
mount -o loop -t iso9660 /root/CentOS-7-x86_64-Minimal-2009.iso /media
  1. 内存不足
    建议大于2G

2. 卡在没有选择磁盘

  1. 卡在anaconda安装界面的没有选择磁盘,需要手动在ks.cfg文件指定磁盘名称
bootloader --location=mbr --boot-drive=sda #注意
  1. 在制作ks.cfg分区设置时,需要手动添加(ADD)至少//boot

3. 卡在DHCP分配地址

在这里插入图片描述

这里需要注意:

  1. 服务器是否是双网卡,是否指定了具体使用的网卡,在编辑/etc/dhcp/dhcpd.conf时,指定interface
```bash
[root@node-139 ~]# cat /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example
#   see dhcpd.conf(5) man page
subnet 192.168.0.0 netmask 255.255.0.0 {interface "ens34";	#网卡range 192.168.17.202 192.168.17.240;option domain-name-servers 8.8.8.8;option routers 192.168.17.1;default-lease-time 600;max-lease-time 7200;next-server 192.168.17.139;filename "pxelinux.0";
}
  1. 客户端机器如果是虚拟机,指定网络模式
  2. 提示no dhcp or proxydhcp,查看服务器的dhcpd服务是否启动

4. tftp open timeout

在这里插入图片描述
可以看到客户端已经获取到了IP,但是准备向tftp服务获取pxelinux.0,但是无法连接tftp服务,这时现象是显示打开tftp超时,并且一直尝试连接。

  • 检查tftp服务是否启动。

5. 服务端缺少pxelinux.0

提示file not found | tftp error
可以看到客户端已经获取到了IP,并且tftp连接也没有报错。但是准备向tftp服务获取pxelinux.0文件失败,提示文件没有发现。

  • 检查/var/lib/tftpboot/目录下是否有pxelinux.0文件。

6. 服务端缺少指定内核的配置文件

提示unable to locate configuration file
可以看到客户端已经获取到了IP,并且tftp连接也没有报错。但是准备向tftp服务获取default文件失败,提示文件没有发现。

  • 检查/var/lib/tftpboot/pxelinux.cfg/default是否存在。

7. 提供ks.cfg文件的服务宕机

在这里插入图片描述
提示failed connect | failed to fetch kisckstart
到这一步,表示内核与伪文件系统已经加载完毕,准备根据ks.cfg应答文件进行自动安装,但是提示连接服务,请求文件失败。

  • 检查web服务是否宕机,该文件可能是由其他服务(ftp|nfs)提供,所以需要检查对应的服务是否宕机。

8. 客户机内存不够

在这里插入图片描述提示no space left on device
到这一步,表示内核与伪文件系统已经加载完毕,没有缺少什么文件,但是空间不够。

  • 检查虚拟机或者客户机的内存是否足够,内存设置至少2G。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/580557.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【IO】IO模型与零拷贝

前言: 正在运行的程序其实就是系统中的一个进程,操作系统会为每一个进程分配内存空间,而内存空间分为两部分,一部分是用户空间,这是用户进程访问的内存区域;另一部分是内核空间,是操作系统内核访…

20种常用的软件测试方法,建议先收藏再观看

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

简单的喷淋实验(2):(1)根据土壤湿度自动控制喷淋开关;(2)根据光照强度控制风扇以及灯的开关---嵌入式实训

目录 简单的喷淋实验(2): (1)根据土壤湿度自动控制喷淋开关; (2)根据光照强度控制风扇以及灯的开关---嵌入式实训 任务2: 具体过程: 所用的头文件: data_global.h …

gin框架使用系列之三——获取表单数据

系列目录 《gin框架使用系列之一——快速启动和url分组》《gin框架使用系列之二——uri占位符和占位符变量的获取》 一、获取get参数 get请求的参数是直接加在url后面的,在gin中获取get请求的参数主要用Query()和DefaultQuery()两个方法,示例代码如下…

【Unity地形】使用地形工具创建场景环境-Terrain

如上图Unity的地形工具可以让我们实现创建复杂、丰富的3D室外环境。 我们创建地形很简单,在层级面板中右键-3Dobject-Terrain 就可以创建一个默认的地形模型!这个模型是Unity内置的。 接下来的地形编辑功能全部集中在这个地形的组件上 主要功能如下&…

WPS中如何根据身份证号生成出生日期并排序

1. wps中如何根据身份证号导出出生日期并排序 1.1 wps中建一张表 1.2 使用转日期格式导出出生日期 DATE(VALUE(MID(C2,7,4)),VALUE(MID(C2,11,2)),VALUE(MID(C2,13,2)))MID(C2, 7, 4):这部分从单元格 C2 中提取文本字符串,从第7个字符开始提取长度为4的…

[python]python使用M-LSD直线检测算法onnx部署模型实时检测

介绍 github地址:https://github.com/navervision/mlsd LSD (M-LSD)一种用于资源受限环境的实时轻量线段检测器。它利用了极其高效的 LSD 架构和新颖的训练方案,包括 SoL 增强和几何学习方案。模型可以在GPU、CPU甚至移动设备上实时运行。算法已开源&a…

【elk-day01】es和kibana搭建及验证---Mac-Docker

Mac系统使用Docker下载搭建和验证eskibana Docker下载安装es安装es验证kibana安装kibana验证 Docker下载安装 Docker Desktop官网安装下载地址 说明一下为什么要安装desktop版本的docker,因为docker作为工具使用,我们需要的是开箱即用,没有必…

windows搭建MySQL 8.25主从配置

1.本次搭建的版本 mysql-8.0.25-win-x64 2.在解压完成后的文件内并没有对应的my.ini的配置文件这个my.ini是需要的主配置文件需要自行创建。 注:安装路径及数据存放路径需根据实际安装情况进行修改(其它配置信息可结合实际情况进行修改) 3.在…

vue+element实现动态表格:根据后台返回的属性名和字段动态生成可变表格

现有一个胡萝卜厂生产不同品种的胡萝卜,为了便于客户了解产品,现需在官网展示胡萝卜信息。现有的萝卜信息:编号(id)、名称(name)、保质期(age)、特点(remark&…

深度学习:计算机技术的革命性突破

深度学习:计算机技术的革命性突破 随着科技的飞速发展,深度学习已经成为计算机技术领域的一股强大力量。它改变了我们与机器的交互方式,为人工智能领域带来了革命性的突破。本篇博客将深入探讨深度学习的原理、应用和发展趋势。 一、深度学…

【python】爬取斗鱼直播照片保存到本地目录【附源码+文末免费送书】

一、导入必要的模块: 这篇博客将介绍如何使用Python编写一个爬虫程序,从斗鱼直播网站上获取图片信息并保存到本地。我们将使用requests模块发送HTTP请求和接收响应,以及os模块处理文件和目录操作。 如果出现模块报错 进入控制台输入&#xff…

【基础篇】五、类的双亲委派机制

文章目录 1、双亲委派机制2、Java代码中去主动加载一个类3、“父”加载器4、Q & A5、打破双亲委派机制 1、双亲委派机制 JVM中有多个类加载器,某个类A,到底该由谁去加载 ⇒ 双亲委派机制 该机制的作用: 保证类加载的安全性:避…

Grafana 配置告警

配置告警 配置告警 1. Grafana 配置文件配置 #################################### SMTP / Emailing ########################## [smtp] enabled true host smtp.qq.com:587 user 9**qq.com # If the password contains # or ; you have to wrap it with triple quotes…

智能优化算法应用:基于白鲸算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于白鲸算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于白鲸算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.白鲸算法4.实验参数设定5.算法结果6.参考文献7.MA…

vue3+elementPlus+cascader动态加载封装自定义组件+v-model指令实现父子通信

文章目录 select普通操作 (1)cascader操作(2) select普通操作 (1) 搜索条件需求:接口入参需要houseId,但是要先选择完楼栋,再选择单元,最后选择房屋 如图&a…

【C#】.net core 6.0 依赖注入生命周期

给自己一个目标,然后坚持一段时间,总会有收获和感悟! 对于.net core而言,依赖注入生命周期有三种瞬态(Transient)、作用域(Scoped)和单例(Singleton)&#xf…

数据结构-如何实现一个队列?逐步解析与代码示例(超详细)

文章目录 前言1.队列的基本概念2.链表与数组实现队列的区别2.1数据存储结构2.2性能2.3内存使用 3.为什么选择链表实现队列?4.结构定义函数声明 5.核心操作5.1初始化 (QInit)5.2销毁 (QDestroy)5.3入队 (QPush)5.4出队 (QPop) 6.队列的查询操作6.1队首元素 (QueueFro…

如何将语音版大模型AI接入自己的项目里(语音ChatGPT)

如何将语音版大模型AI接入自己的项目里语音ChatGPT 一、语音版大模型AI二、使用步骤1、接口2、请求参数3、请求参数示例4、接口 返回示例5、智能生成API代码 三、 如何获取appKey和uid1、申请appKey:2、获取appKey和uid 四、重要说明 一、语音版大模型AI 基于阿里通义千问、百…

分享5款实用的小工具,提升你的工作效率

​ 工作中,简单而实用的小工具能够为我们带来事半功倍的效果。这五款工具可能是你工作效率提升的关键。 1.云存储——Dropbox ​ Dropbox是一款流行的云存储服务,可以让你在不同的设备上同步和访问你的文件。你可以将你的文件上传到Dropbox的服务器上&…