远程服务器QEMU+Ubuntu+GRUB+VNC最佳实践

远程服务器QEMU+Ubuntu+GRUB+VNC最佳实践

    • 1. 准备
    • 2. QEMU启动安装Ubuntu
      • 2.1 服务器端
      • 2.2 本地端
    • 3. 从服务器终端控制虚拟机GRUB与虚拟机终端

这段时间参与大量内核切换测试工作,实体机需要硬件自检太过笨重,因此主要通过QEMU验证正确性。有一个很大的问题是QEMU运行起来后终端看不到系统的状态,只能通过VNC连接,这无疑是比较低效的方法。更为重要的是,QEMU搭载在远程服务器上。下面介绍本人的最佳实践。

1. 准备

  • 远程服务器:(ip) a.b.c.d
    • QEMU
    • Ubuntu镜像
  • 本地机器
    • ssh
    • VNCViewer

2. QEMU启动安装Ubuntu

2.1 服务器端

OS_IMG=./ubuntu20.img
qemu-system-x86_64 -m 4G\-hda ${OS_IMG} \-enable-kvm \-cpu host \-device e1000,netdev=net \-netdev user,id=net,hostfwd=tcp::2333-:22 \-smp cpus=20 \-serial stdio \-vnc :2
  • -netdev ... hostfwd=tcp::2333-:22:此时a.b.c.d:2333端口被转发到虚拟Ubuntu的22端口,意味着可以通过ssh a.b.c.d:2333连接虚拟机。不过需要虚拟机上安装openssh
  • -serial stdio:虚拟机的串口使用服务器的标准输出(也就是能够在终端显示)
  • -vnc :2:暴露VNC口a.b.c.d:5902

2.2 本地端

此时只能使用VNC连接安装,如何快速连接远端VNC口呢?参考

  • 在服务器上用qemu制作虚拟机

  • vnc通过ssh隧道连接到Linux服务器

总的来说,首先在本地建立起 ssh隧道

ssh -L 5902:localhost:5902 username@a.b.c.d

这代表本地端的5902端口与a.b.c.d:5902建立起了一条隧道,将本地机的5902端口转发到远端机器的5902端口

然后打开VNCReviewer,连接localhost:5902即可

在这里插入图片描述

3. 从服务器终端控制虚拟机GRUB与虚拟机终端

安装完毕后,重新运行QEMU,终端上仍然在等待VNC连接,没有任何输出。参考

  • UbuntuHelp:SerialConsoleHowto

远程连接虚拟机

ssh username@a.b.c.d -p 2333

修改虚拟机配置/etc/default/grub如下:

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'GRUB_DEFAULT=saved
# GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="maybe-ubiquity"
GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8"# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"# Uncomment to disable graphical terminal (grub-pc only)
GRUB_TERMINAL="serial"# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

关键点如下:

  • GRUB_TERMINAL="serial",GRUB的输出通过串口输出
  • GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8" :Ubuntu Linux的输出通过串口输出

sudo reboot后就能够在服务器终端上看到GRUB菜单以及Ubuntu的输出信息,然后就可以彻底抛弃VNC了。


OK,从现在开始就可以起飞了🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫

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

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

相关文章

JavaSE基础50题:11. 输出一个整数的每一位

概述 输出一个整数的每一位。 如:1234的每一位是4,3,2,1 。 个位:1234 % 10 4 十位:1234 / 10 123 123 % 10 3 百位:123 / 10 12 12 % 10 2 千位: 12 / 10 1 代码 ublic sta…

【小白专用】MySQL入门(详细总结)

3. 创建数据库 使用 create database 数据库名; 创建数据库。 create database MyDB_one; create database DBAliTest; 创建数据库成功后,数据库的数量变成了6个,多了刚才创建的 dbalitest 。 4. 创建数据库时设置字符编码 使用 create database 数据…

YouTube网红营销:出海品牌扩大影响力的关键

随着数字媒体的兴起,社交媒体已成为品牌与消费者之间建立联系的重要桥梁。其中,YouTube作为全球最大的视频分享平台,不仅拥有庞大的用户群体,还聚集了众多有影响力的网红。这些网红在各自的领域内拥有强大的话语权和号召力&#x…

虚拟化之指令的Trap和仿真

有时,虚拟机监控程序需要在虚拟机(VM)中模拟操作。例如,VM内的软件可能尝试配置与功耗管理或缓存一致性相关的低级处理器控件。通常,您不希望将VM直接访问这些控件,因为它们可能被用于突破隔离,或影响系统中的其他VM。 trap在执行给定操作(例如读取寄存器)时引发异常…

2023年全国职业院校技能大赛-大数据应用开发-数据可视化

可视化题目与以往相同,做法类似,我这里展示得到语句后处理优化以后的代码,以函数式来写可视化,比以前400-500多行代码简洁到100多行。其他题目见本栏目,那里面的代码都是没有优化后的,这次主要以效率和精简…

如何解压没有密码的7-zip文件?

7z压缩包设置了密码,解压的时候就需要输入正确对密码才能顺利解压出文件,正常当我们解压文件或者删除密码的时候,虽然方法多,但是都需要输入正确的密码才能完成。忘记密码就无法进行操作。 那么,忘记了7z压缩包的密码…

文件重命名大师:批量修改名称的终极指南

在处理大量文件时,我们往往需要修改它们的名称。无论是为了整理、归档还是为了满足某种特定需求,重命名文件都是一项常见的任务。然而,手动一个一个地修改文件名无疑是一项耗时且容易出错的工作。幸运的是,我们可以借助一些强大的…

Python---类的综合案例

1、需求分析 设计一个Game类 属性: 定义一个类属性top_score记录游戏的历史最高分 定义一个实例属性player_name记录当前游戏的玩家姓名 方法: 静态方法show_help显示游戏帮助信息 类方法show_top_score显示历史最高分 实例方法start_game开始当前…

13、pytest为失败的断言定义自己的解释

官方实例 # content of ocnftest.py from test_foocompare import Foodef pytest_assertrepr_compare(op, left, right):if isinstance(left, Foo) and isinstance(right, Foo) and op "":return["Comparing Foo instances:",f" vals:{left.val} !…

震坤行走进中国移动电商平台业务推介启动会助力政企采购升级

震坤行走进中国移动电商平台业务推介启动会助力政企采购升级 7月19日,震坤行受邀参与中国移动供应链管理中心在北京举办的“和悦彩同行 创供赢未来”主题活动,走入客户一线面对面沟通,依托MRO领域服务能力为客户提供专业解决方案&#xff0c…

node后端接口无法插入数据为emoji的表情的问题

原因 emoji的表情一般是这样的\xF0\x9F\x98\x80或者是\xF0\x9F\x98 ,事实上 一般数据库的utf8的编码类型都是能保存\xF0\x9F\x98 但是不能保存\xF0\x9F\x98\x80这种样的emoji,要将数据库编码格式为utf8mb4 也就是utf8的超集 另外,除了 数据库…

angular状态管理方案(ngrx)

完全基于redux的ngrx方案,我们看看在angular中如何实现。通过一个简单的计数器例子梳理下整个流程 一 安装 :npm i ngrx/store 这里特别要注意一点:安装 ngrx/store的时候会出现和angular版本不一致的问题 所以检查一下angular/core的版本…

使用 HPA 和 TopologySpreadConstraints 实现可用区间等比扩容

1. 原理介绍 设置 HPA 每次最小扩容 Pod 数为可用区数量,以期可用区间 Pod 同步扩容设置 TopologySpreadConstraints 可用区分散 maxSkew 为 1,以尽可能可用区间 Pod 均匀分布 2. 实验验证 2.1. 准备 Kind 集群 准备如下配置文件,命名为 …

“身份证信息批量核验:高效解决管理难题,轻松提升工作效率“

尊敬的读者们,您是否曾经因为身份证信息的核验而感到烦恼?是否曾经因为手动核验而感到繁琐和耗时?现在,我们向您介绍一款全新的工具——身份证信息批量核验器,它将帮助您一键解决管理难题,让工作事半功倍&a…

尝试通过AI模型进行简单的编码

一、前言 最近尝试通过AI来编程,总体感觉还是能处理写简单的问题,复杂的问题目前还是无法解决。主要的痛点还是数据噪音,就是AI永远不会承认它不会,它会给你的一个错误的信息,它也不会告诉你你的问题它暂时无法完整正…

Python基础语法详解,零基础入门必须掌握的知识点

文章目录 一、Python输出1、repr() 或 str() 转成字符串2、字符串填充空格进行格式化3、!a (使用 **ascii()**), !s (使用 **str()**) 和 !r (使用 **repr()**) 可以用于在格式化某个值之前对其进行转化 二、Python标识符三、Python保留字符(关键字)四、…

对Spring源码的学习:一

目录 BeanFactory开发流程 ApplicationContext BeanFactory与ApplicationContext对比 基于XML方式的Bean的配置 自动装配 BeanFactory开发流程 这里的第三方指的是Spring提供的BeanFactory,Spring启动时会初始化BeanFactory,然后读取配置清单&#…

外汇天眼:什么时段做外汇交易最好,有所谓的“最佳时间点”吗?

在外汇交易的时候,很多手动交易的投资者不知道到底什么时间段操作交易最适合自己。 我们在进行选择最佳交易时间的时候,一定要明白各时间段的全球各个市场的交易状况,这样你才能分配好自己的时间。 当然在通过技术分析与基本分析选择好币种后…

Google刚发布AlphaCode 2,让我们码农多了个小伙伴一起干活

除了其Gemini生成式人工智能模型之外,谷歌今天早上发布了AlphaCode 2,这是谷歌DeepMind实验室大约一年前推出的代码生成AlphaCode的改进版本。 事实上,AlphaCode 2实际上由Gemini提供支持,或者至少是由Gemini的某个变体&#xff…

基于个微机器人的开发

简要描述: 下载消息中的动图 请求URL: http://域名/getMsgEmoji 请求方式: POST 请求头Headers: Content-Type:application/jsonAuthorization:login接口返回 参数: 参数名必选类型说明…