后浪笔记一零二四

1. 安装msys2

官网: https://www.msys2.org

github: https://github.com/msys2/msys2-installer

镜像地址: https://mirrors.tuna.tsinghua.edu.cn/msys2/distrib/x86_64/

安装位置: D:\software\msys64

添加如下windows terminal配置:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
             {
                "closeOnExit": "graceful",
                "commandline": "D:\\software\\msys64\\msys2_shell.cmd -ucrt64 -defterm -no-start -here",
                "cursorShape": "filledBox",
                "guid": "{1c4de342-38b7-51cf-b940-2309a097f589}",
                "hidden": false,
                "historySize": 9001,
                "icon": "D:\\software\\msys64\\msys2.ico",
                "name": "Bash",
                "startingDirectory": "D:\\",
                "useAcrylic": true
            },

tip: windows terminal如何展示选项卡的名字, 在.bashrc的末尾添加一行, export PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"'

  1. 配置pacman镜像

pacman是arclinux中的软件管理工具,也是widows上msys2默认的软件管理工具。

镜像地址:https://mirrors.tuna.tsinghua.edu.cn/help/msys2/

启动msys2,并执行如下命令:

1
sed -i "s#https\?://mirror.msys2.org/#https://mirrors.tuna.tsinghua.edu.cn/msys2/#g" /etc/pacman.d/mirrorlist*

执行 pacman -Sy 刷新软件包数据

解决错误:clangarm64: 密钥 "5F944B027F7FE2091985AA2EFA11531AA0AA7F57" 未知问题:

1
2
3
4
# 编辑/etc/pacman.conf文件,设置这三个配置
SigLevel    = Never
LocalFileSigLevel = Optional
RemoteFileSigLevel = Never
  1. pacman常用命令

pacman -Sy: 从服务器下载新的软件包数据库(实际上就是下载远程仓库最新软件列表到本地)。

pacman -Syu: 升级系统及所有已经安装的软件。

pacman -S 软件名: 安装软件。也可以同时安装多个包,只需以空格分隔包名即可。

pacman -Rs 软件名: 删除软件,同时删除本机上只有该软件依赖的软件。

pacman -Ru 软件名: 删除软件,同时删除不再被任何软件所需要的依赖。

pacman -Ssq 关键字: 在仓库中搜索含关键字的软件包,并用简洁方式显示。

pacman -Qs 关键字: 搜索已安装的软件包。

pacman -Qi 软件名: 查看某个软件包信息,显示软件简介,构架,依赖,大小等详细信息。

pacman -Sg: 列出软件仓库上所有的软件包组。

pacman -Sg 软件包组: 查看某软件包组所包含的所有软件包。

pacman -Sc:清理未安装的包文件,包文件位于 /var/cache/pacman/pkg/ 目录。

pacman -Scc:清理所有的缓存文件

qemu参数说明

-M -machine的缩写,指定计算机类型

-smp 定义smp系统处理器的个数

-numa 定义numa系统处理器的属性

smp系统:Symmetric Multi Processing对称多处理器结构,所有的CPU共享全部资源,如总线,内存和I/O系统等。多个CPU之间没有区别,平等地访问内存、外设、一个操作系统。操作系统管理着一个队列,每个处理器依次处理队列中的进程。如果两个处理器同时请求访问一个资源(例如同一段内存地址),由硬件、软件的锁机制去解决资源争用问题。所谓对称多处理器结构,是指服务器中多个 CPU 对称工作,无主次或从属关系。各 CPU 共享相同的物理内存,每个 CPU 访问内存中的任何地址所需时间是相同的,因此 SMP 也被称为一致存储器访问结构

numa系统:Non-Uniform Memory Access非一致存储访问结构,NUMA 服务器的基本特征是具有多个 CPU 模块,每个 CPU 模块由多个 CPU( 如 4 个 ) 组成,并且具有独立的本地内存、 I/O 槽口等。由于其节点之间可以通过互联模块 ( 如称为 Crossbar Switch) 进行连接和信息交互,因此每个 CPU 可以访问整个系统的内存 ( 这是 NUMA 系统与 MPP 系统的重要差别 ) 。显然,访问本地内存的速度将远远高于访问远地内存 ( 系统内其它节点的内存 ) 的速度,这也是非一致存储访问 NUMA 的由来。由于这个特点,为了更好地发挥系统性能,开发应用程序时需要尽量减少不同 CPU 模块之间的信息交互。

调试选项:

-serial dev 将串口重定向到dev设备

-parallel dev 将并口重定向到dev设备

启动欧拉

欧拉镜像下载地址: https://repo.openeuler.org/openEuler-22.03-LTS-SP2/virtual_machine_img/x86_64/openEuler-22.03-LTS-SP2-x86_64.qcow2.xz

镜像默认登录密码: openEuler12#$

qemu-system-x86_64.exe -m 9216 -smp 6 -M q35 -cpu qemu64 -net user,hostfwd=tcp:127.0.0.1:2222-:22 -net nic -hda openEuler-22.03-LTS-SP2-x86_64.qcow2

qemu-system-x86_64.exe -m 9216 -smp 6 -M q35 -cpu qemu64 -net user,hostfwd=tcp:127.0.0.1:2222-:22 -net nic -drive file=tianqing.raw,index=1,media=disk,format=raw -drive file=openEuler-22.03-LTS-SP2-x86_64.qcow2,index=0,media=disk,format=qcow2

对于aarch64类型的虚拟机,还需要执行这一步:

$ find / -type f -name 'edk2*'
/ucrt64/share/licenses/qemu/pc-bios/edk2-licenses.txt
/ucrt64/share/qemu/edk2-aarch64-code.fd
/ucrt64/share/qemu/edk2-arm-code.fd
/ucrt64/share/qemu/edk2-arm-vars.fd
/ucrt64/share/qemu/edk2-i386-code.fd
/ucrt64/share/qemu/edk2-i386-secure-code.fd
/ucrt64/share/qemu/edk2-i386-vars.fd
/ucrt64/share/qemu/edk2-licenses.txt
/ucrt64/share/qemu/edk2-x86_64-code.fd
/ucrt64/share/qemu/edk2-x86_64-secure-code.fd

# 将edk2-aarch64-code.fd文件复制到qcow2镜像文件所在的目录下
$ cp /ucrt64/share/qemu/edk2-aarch64-code.fd .

# 使用如下命令启动虚拟机:
$ qemu-system-aarch64.exe -m 9216 -smp 6 -M virt -cpu cortex-a72  -bios edk2-aarch64-code.fd -net user,hostfwd=tcp:127.0.0.1:222-:22 -net nic -drive file=openEuler-22.03-LTS-SP2-aarch64.qcow2,index=0,media=disk,format=qcow2

# aarch64类型的虚拟机,默认打开的是qemu的虚拟化窗口,需要按下Ctrl+Alt+2切换到串口控制台

修改qcow2镜像的root密码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
$ yum install -y libguestfs-tools
$ LIBGUESTFS_BACKEND=direct virt-customize --add CentOS-7-x86_64-GenericCloud-2003.qcow2 --root-password password:1234


或者
$ LIBGUESTFS_BACKEND=direct guestfish  --rw -a openSUSE-Leap-15.6.aarch64-1.0.0-NoCloud-Build3.197.qcow2
><fs> run
><fs> list-filesystems
><fs> vi /etc/shadow #替代root的秘密,利用前面openssl生成的密码,openssl passwd -1 1234
><fs> quit


或者,在grub引导界面,按e:
在内核那部分把ro改成rw,在最后加上init=/bin/bash,然后按ctrl+x或者F10
$linux  /boot/Image-5.14.21-150500.55.49-default  root=LABEL=ROOT console=ttyS0  net.ifnames=0  dis_ucode_ldr  init=/bin/bash

进入系统后:
mount -n / -o remount,rw #把根重新mount为可读写
passwd root 修改密码
mount -n / -o remount,ro #把根设回原来转态

ARM架构的BIOS固件下载地址: https://releases.linaro.org/components/kernel/uefi-linaro/latest/release/qemu64/QEMU_EFI.fd

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 精细版本
$ qemu-system-aarch64.exe -m 9216 -smp 6 -M virt -cpu cortex-a72 --accel tcg,thread=multi -bios QEMU_EFI.fd \
> -drive if=virtio,file=Kylin-Server-V10-SP3-General-Release-2303-ARM64.qcow2,index=0,media=disk,format=qcow2 \
> -drive if=none,file=Kylin-Server-V10-SP3-General-Release-2303-ARM64.iso,id=cdrom,media=cdrom -device virtio-scsi-device -device scsi-cd,drive=cdrom \
> -device nec-usb-xhci -device usb-tablet -device usb-kbd \
> -display sdl -device VGA
# -device usb-mouse有个问题就是它的鼠标坐标系 > 基于物理机分辨率计算,当虚拟机分辨率和宿主机不一样时会发生偏移现象,所以建议使用-device usb-tablet
# -display sdl 可以替换为 -display vnc=127.0.0.1:0,以开启vnc;这两个参数也可以同时使用,会同时开启vnc和sdl(qemu默认的图形化界面),不推荐。
# -monitor stdio是默认使用serial0控制台,在windows下请使用此项;如在linux下,请替换为-nographic,因为在Linux中存在键盘方向键无法使用的问题,十分不便

# 简单版本
$ qemu-system-aarch64.exe -m 9216 -smp 6 -M virt -cpu cortex-a72 --accel tcg,thread=multi -bios QEMU_EFI.fd \
> -cdrom Kylin-Server-V10-SP3-General-Release-2303-ARM64.iso -hda Kylin-Server-V10-SP3-General-Release-2303-ARM64.qcow2

麒麟v10 aarch64安装踩坑:

1
#更改bios设置:在Security选项卡下面将Secure boot改为Disable;在Startup选项卡下面,将UEFI/LEGACY BOOT 改为Both或者LEGACY First

添加数据盘

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
$ qemu-img create -f fmt -o options fname size

# -f fmt : 目标映像的格式,通常使用raw或qcow2,其中默认值是raw
# -o options : raw映像格式支持size和nocow选项
# fname :  要创建的目标硬盘映像的路径
# 目标硬盘映像的大小(如果尚未使用 -o size=<image_size>选项指定)。映像大小可使用的后缀有:K、M、G、T

$ qemu-img create -f raw -o size=4G /images/sles.raw
Formatting '/images/sles.raw', fmt=raw size=4294967296

$ ls -l /images/sles.raw
-rw-r--r-- 1 tux users 4294967296 Nov 15 15:56 /images/sles.raw

$ qemu-img info /images/sles.raw
image: /images/sles11.raw
file format: raw
virtual size: 4.0G (4294967296 bytes)
disk size: 0

提示:如果您需要在 Btrfs 文件系统上创建磁盘映像,可以使用 nocow=on 来减少 Btrfs 的写入时复制功能产生的性能开销 但是,如果您想使用写入时复制(例如,要使用此功能来创建快照或者在虚拟机之间共享快照),请在命令行中省略 nocow 选项

qcow2 是 QEMU 使用的主要磁盘映像格式。其大小可按需增长,仅当虚拟机确实需要磁盘空间时才分配磁盘空间。

qcow2 格式的文件以恒定大小的单元进行组织。这些单元称为簇。QEMU 默认为 64 kB 簇,可以使用cluster_size选项来指定其他值。

qcow2 映像包含一组表,这些表划分为两个级别,分别称为 L1 表和 L2 表。每个磁盘映像只有一个 L1 表,而根据映像的大小,L2 表可能有很多。

要在虚拟磁盘中读取或写入数据,QEMU 需要读取其对应的 L2 表,以确定相关数据位置。由于为每个 I/O 操作读取该表会消耗系统资源,QEMU 会在内存中缓存 L2 表,以提高磁盘访问速度。

提高硬盘性能

优化器:

  • tcg 默认值,QEMU虚拟化的思路是:提取Guest代码,翻译为TCG中间代码,而后翻译为Host代码。相当于实现了一个“中间人”的角色。
    • 微型代码生成器(TCG)旨在消除依赖特定版本的GCC或编译器的缺点,并将编译合并到QEMU的运行时任务中。
    • 因此,整个翻译阶段由两部分组成:目标代码块(TB)以TCG指令(一种机器无关的中间符号)重写 ,随后TCG为宿主机架构执行编译。
  • whpx : Windows Hypervisor Platform,使用这个优化器时会启用hyper-v, -accel accel=whpx,kernel-irqchip=off
    • kernel-irqchip=off选项用于解决injection failed问题
  • kvm : linux平台专用

调整ext4根文件系统大小

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 使用qemu-img命令,扩大qcow2文件的大小
$ qemu-img.exe resize   jammy-server-cloudimg-amd64.img +20G

# 使用ssh命令登录虚拟机

# 给 /dev/vda 硬盘重新分区,先删除vda2分区,再创建它
$ fdisk /dev/vda
$ lsblk
$ cat /proc/partitions | grep vd
$ partx -u /dev/vda
$ cat /proc/partitions | grep vd
$ tune2fs -l /dev/vda2
$ df -lhT
$ resize2fs /dev/vda2
$ echo $?
$ df -lhT
$ dumpe2fs -h /dev/vda2 | grep -i "mount count"
$ tune2fs -c 1 /dev/vda2
$ dumpe2fs -h /dev/vda2 | grep -i "mount count"
$ reboot
$ tune2fs -c -1 /dev/vda2
$ dumpe2fs -h /dev/vda2 | grep -i "mount count"

其他命令

fstrim -a 解决频繁删除文件,底层存储没有释放的问题

LIBGUESTFS_BACKEND=direct virt-sparsify –in-place disk.qcow2

如果ls -lh 和 du -sh 的值不一致,还需要转一下: qemu-img convert -p -f qcow2 -O qcow2 disk.qcow2 disk_new.qcow2


本文发表于 0001-01-01,最后修改于 0001-01-01。

本站永久域名「 jiavvc.top 」,也可搜索「 后浪笔记一零二四 」找到我。


上一篇 « 下一篇 »

赞赏支持

请我吃鸡腿 =^_^=

i ysf

云闪付

i wechat

微信

推荐阅读

Big Image