dd if=/dev/zero of=./linux.img bs=512M count=1 status=progress
1+0 records in 1+0 records out 536870912 bytes (537 MB, 512 MiB) copied, 0.725475 s, 740 MB/s接着输入:
ls -lh linux.img
-rw-r--r-- 1 root root 512M Jan 3 02:52 linux.img接下来就需要建立一个文件夹了
mkdir root
fdisk linux.img
Welcome to fdisk (util-linux 2.41.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS (MBR) disklabel with disk identifier 0xf8678042. Command (m for help):查询状态:
p
Disk linux.img: 512 MiB, 536870912 bytes, 1048576 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xf8678042 Command (m for help):我的个人习惯是bios的启动方式确认当前type是msdos也就可以下一步了
n
Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p):根据提示,选择
p
Partition number (1-4, default 1):可以回车默认,也可以选择1
First sector (2048-1048575, default 2048):这个是选择扇区起始位置
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-1048575, default 1048575):
接下来就是分配大小了
要注意命令,输入分配空间的时候要加上+
比方说:
+100M
n
p
Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (206848-1048575, default 206848):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (206848-1048575, default 1048575):
Created a new partition 2 of type 'Linux' and of size 411 MiB.
Command (m for help):
接下来,输入:
p
Disk linux.img: 512 MiB, 536870912 bytes, 1048576 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xf8678042 Device Boot Start End Sectors Size Id Type linux.img1 2048 206847 204800 100M 83 Linux linux.img2 206848 1048575 841728 411M 83 Linux Command (m for help):最后,最关键的一步
w
保存修改
The partition table has been altered.大功告成!!!!!
注意: 以下命令均需要root用户来操作
请各位手动切换至root用户
su root
losetup -f -P linux.img
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 512M 0 loop ├─loop0p1 259:2 0 100M 0 part └─loop0p2 259:3 0 411M 0 part sda 8:0 0 59.6G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 58.6G 0 part └─arch-lv_root 253:0 0 40G 0 lvm / sdb 8:16 0 465.8G 0 disk └─md127 9:127 0 931.3G 0 raid6 └─vg_nas-lv_data 253:1 0 500G 0 lvm /mnt/nas_data sdc 8:32 0 465.8G 0 disk └─md127 9:127 0 931.3G 0 raid6 └─vg_nas-lv_data 253:1 0 500G 0 lvm /mnt/nas_data sdd 8:48 0 465.8G 0 disk └─md127 9:127 0 931.3G 0 raid6 └─vg_nas-lv_data 253:1 0 500G 0 lvm /mnt/nas_data sde 8:64 0 465.8G 0 disk └─md127 9:127 0 931.3G 0 raid6 └─vg_nas-lv_data 253:1 0 500G 0 lvm /mnt/nas_data sdf 8:80 1 14.9G 0 disk └─sdf1 8:81 1 14.9G 0 part我的是这样的,可以看到
loop0 7:0 0 512M 0 loop ├─loop0p1 259:2 0 100M 0 part └─loop0p2 259:3 0 411M 0 part这个就是挂载的img镜像的了
mkfs.ext4 /dev/loop0p1
mke2fs 1.47.3 (8-Jul-2025) Discarding device blocks: done Creating filesystem with 102400 1k blocks and 25584 inodes Filesystem UUID: 6d4cac90-2dba-43db-a63b-aa2453593477 Superblock backups stored on blocks: 8193, 24577, 40961, 57345, 73729 Allocating group tables: done Writing inode tables: done Creating journal (4096 blocks): done Writing superblocks and filesystem accounting information: done第二个是root的
mkfs.ext4 /dev/loop0p2
mke2fs 1.47.3 (8-Jul-2025) Discarding device blocks: done Creating filesystem with 420864 1k blocks and 105248 inodes Filesystem UUID: 957b83b2-0fa5-464c-9d9b-53a5a089c60f Superblock backups stored on blocks: 8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409 Allocating group tables: done Writing inode tables: done Creating journal (8192 blocks): done Writing superblocks and filesystem accounting information: done这样我们就初始化文件系统完毕了
mount /dev/loop0p2 ./root
cd root && mkdir boot
mount /dev/loop0p1 ./boot
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 512M 0 loop ├─loop0p1 259:2 0 100M 0 part /home/kami/Desktop/MBL/root/boot └─loop0p2 259:3 0 411M 0 part /home/kami/Desktop/MBL/root当我们看到了之前载入设备的dev/loop后面跟上了文件夹的时候就完成啦~~~~
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 512M 0 loop ├─loop0p1 259:2 0 100M 0 part /home/kami/Desktop/MBL/root/boot └─loop0p2 259:3 0 411M 0 part /home/kami/Desktop/MBL/root得到以下信息后,就可以开始安装grub了
grub-install --target=i386-pc --boot-directory=./boot/ /dev/loop0
Installing for i386-pc platform. Installation finished. No error reported.欸?奇怪,为什么会error呢?
busybox 编译后产物 /home/kami/Desktop/MBL/busybox/ linux 内核 /home/kami/Desktop/MBL/bzImage 文件系统根路径 /home/kami/Desktop/MBL/root/ 文件系统根路径下的boot文件夹 /home/kami/Desktop/MBL/root/boot/接下来就需要把指定文件复制到指定位置了
cp -a /home/kami/Desktop/MBL/busybox/* /home/kami/Desktop/MBL/root/
cp -a /home/kami/Desktop/MBL/bzImage /home/kami/Desktop/MBL/root/boot/
mkdir sys dev proc
cd /home/kami/Desktop/MBL/root/boot/grub/
touch grub.cfg
menuentry "linux 0.1"{
insmod ext2
search --fs-uuid --set=root {UUID}
linux /boot/bzImage root=PARTUUID={PARTUUID} rw
init=/init rootdelay=5
}
blkid /dev/loop0p{1,2}
root@arch-cat /h/k/D/MBL# blkid /dev/loop0p{1,2}
/dev/loop0p1: UUID="6d4cac90-2dba-43db-a63b-aa2453593477" BLOCK_SIZE="1024" TYPE="ext4" PARTUUID="f8678042-01"
/dev/loop0p2: UUID="957b83b2-0fa5-464c-9d9b-53a5a089c60f" BLOCK_SIZE="1024" TYPE="ext4" PARTUUID="f8678042-02"
root@arch-cat /h/k/D/MBL#
这样就会列出这两个分区的UUDI和PARTUUID了
menuentry "linux 0.1"{
insmod ext2
search --fs-uuid --set=root 6d4cac90-2dba-43db-a63b-aa2453593477
linux /boot/bzImage root=PARTUUID=f8678042-02 rw
init=/init rootdelay=5
}
不过要注意,第一个UUID填的的应该是第一个分区的
第二个PARTUUID是第二个分区的
#!/bin/sh mount -t proc none /proc mount -t sysfs none /sys mount -t devtmpfs devtmpfs /dev #mount UUID=6d4cac90-2dba-43db-a63b-aa2453593477 /boot #export HOME="/root" clear sleep 3 exec /sbin/init
chmod +x init
qemu-system-x86_64 linux.img -enable-kvm
can't run '/etc/init.d/rcS': No such file or directory Please press Enter to activate this console. _没关系,这是正常的按下回车就可以进入系统了
/ # / #那么大功告成啦~~~