usb启动盘安装grub
usb启动盘安装grubEFI启动方式
1234567891011121314151617181920# u盘是sdb的情况下mkdir /mnt/1mkdir /mnt/2mkdir /mnt/3local dev="sdb"umount ${dev}*parted -s ${dev} mklabel gpt # GPTparted -s ${dev} mkpart ESP fat32 1MiB 301MiB set 1 esp onparted -s ${dev} mkpart boot ext4 301MiB 701MiBparted -s ${dev} mkpart primary ext4 701MiB 100%mkfs.vfat -F 32 ${dev}1mkfs.ext4 -F ${dev}2mkfs.ext4 -F ${dev}3local boot_dir=/mnt/1local grub ...
虚拟机测试initrd
测试x86的initrd1qemu-system-x86_64 -kernel ./vmlinuz-5.15.0-76-generic -initrd ./initrd.new -m 4096M
vmlinuz要和initrd的版本相同
uname -r查看内核版本
12uname -r 5.15.0-76-generic
dash计算文件夹里所有文件的md5
dash计算文件夹里所有文件的md51find ./dir/ -type f -print0 | xargs -0 md5sum > md5sum.txt
dash中替代数组的方法
bash中的数组bash脚本test.sh
1234567891011index=10for i in `seq 0 9`do arr[${i}]=${index} index=$((${index}+1))donefor i in `seq 0 9`do echo ${arr[${i}]}done
1234567891011sh test.sh10111213141516171819
dash中的数组替代方法dash脚本test.sh
123456789101112131415161718192021222324252627vector_get(){ local name="$1" local i="$2" eval echo '$'{${name}${i}}}vector_set(){ loca ...
shell输出变量丢失换行
shell输出变量丢失换行bash
赋值
1a=`echo -e "a\nb"`
输出
1echo $a
显示:
1a b
shell调用其它脚本的函数
shell调用其它脚本的函数bash
shellname.sh
12345678910test_func(){ local p1="$1" if [ "$p1" == "" ]; then echo "1 null" return 1 fi echo "1 ${p1}" return 0}
12345678. ./shellname.shres=`test_func "123"`if [ $? != "0" ]; then echo "fatal"else echo "ok"fi
initrd的init中读取grub参数
方法/proc/cmdline文件中是grub的命令行参数
12345678910for x in $(cat /proc/cmdline); do case $x in # "..." # 省略 # 读取mysystemname mysystemname=*) MYSYSTEMNAME=${x#mysystemname=} ;; # 结束 esacdone
例子grub.cfg
123456menuentry "ubuntu vmlinuz-5.15.0-76" { insmod ext2 insmod part_gpt linux /boot/vmlinuz root=(hd0,1) vdisk=/dev/sda2 sroot=/dev/nbd0p1 mysystemname=ubuntu initrd /boot/initrd-5}
123456789101112for x in $(cat ...
测试initrd.img
测试initrd.img1qemu-system-x86_64 -kernel ./vmlinuz-5.4.0-42-generic -initrd ./initrd.img -m 1024M
kernel和initrd版本要相同
qemu工具和kernel要对应
initramfs打包软件进initrd.img
initramfs打包软件进initrd.imgcopyexec.sh
1234567891011#!/bin/sh -ePREREQS=""case $1 in prereqs) echo "${PREREQS}"; exit 0;;esac. /usr/share/initramfs-tools/hook-functionsecho "cp ifconfig"copy_exec /usr/sbin/ifconfig /usr/sbinecho "copy done"
把上面的脚本放到/etc/initramfs-tools/hooks/里面
然后使用mkinitramfs制作initrd.img
1mkinitramfs -o initrd.img
initramfs打包模块进initrd.img
initramfs打包模块进initrd.img查看模块1modprobe --show-depends nbd
nbd模块名称
模块存在会显示路径
1insmod /lib/modules/5.15.0-76-generic/kernel/drivers/block/nbd.ko
增加模块修改/etc/initramfs-tools/modules
12345678910111213141516171819202122232425# List of modules that you want to include in your initramfs.# They will be loaded at boot time in the order below.## Syntax: module_name [args ...]## You must run update-initramfs(8) to effect this change.## Examples:## raid1# sd_modnbdnet # 网络模块# squashfs# ahci# libahci# usb-st ...