作者:Zero
导言
GeekLogic 放出了在龙芯3A2000C平台的 Linux 镜像,但是就我的使用习惯而言,镜像的 SWAP 分区太小, 而且根目录分区大小只有2G不够用,所以,让我们来调整镜像使它更适用吧!
第一步:将原版镜像写入到需要安装系统的硬盘
参考 wells 的文章 https://geek-logic.com/debian-os-image-loongson3-mips64el/
-
假设主机环境为 Linux ,硬盘连接后硬件路径为 /dev/sdx
dd if=debian11.min.3.img of=/dev/sdx bs=16M
-
注意 一定要写对需要安装系统的硬盘路径,如果写错,并且是一个存在的硬盘路径的话,会直接覆盖该硬盘的分区表, 进而导致惨痛的数据丢失。
-
bs 选项的意思是:一次读入和输出的数据大小,wells 加这个选项可能是为了降低内存使用?(存疑)
第二步:调整 SWAP 分区
上一步写完硬盘后可以看到硬盘分区情况 ***
代表省略。
lsblk
***
sdc 8:32 1 29.8G 0 disk
├─sdc1 8:33 1 400M 0 part
├─sdc2 8:34 1 2G 0 part
└─sdc3 8:35 1 2G 0 part
blkid
***
/dev/sdc1: UUID="faa5b03a-f7de-4b89-a5e1-a2e97738f7b4" BLOCK_SIZE="1024" TYPE="ext4" PARTUUID="629a8fc7-01"
/dev/sdc2: UUID="2750d19c-4c06-4498-b8cd-30785b5afbe7" TYPE="swap" PARTUUID="629a8fc7-02"
/dev/sdc3: UUID="9f4dc75e-6d6a-4906-8be7-fcd5b7331b8c" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="629a8fc7-03"
- 我的实际情况是硬盘路径为 /dev/sdc
可以看到,/dev/sdc2 为 SWAP 分区,那么 400M 的 /dev/sdc1 为引导分区,2G 的 /dev/sdc3 为根目录数据分区, 如果还是不确定,可以挂载看看其中的内容
mkdir sdcLook
mount /dev/sdc3 sdcLook
ls sdcLook
bin dev home lib lib64 lost+found mnt proc run srv tmp var vmlinux.old
boot etc initrd.img lib32 libo32 media opt root sbin sys usr vmlinux
# 可以很明显看出,这是根目录
知道了各个分区的作用之后,我们来调整分区。
gdisk /dev/sdc
# 先查看一下分区情况
p
Number Start (sector) End (sector) Size Code Name
1 2048 821247 400.0 MiB 8300 Linux filesystem
2 821248 5015551 2.0 GiB 8200 Linux swap
3 5015552 9209855 2.0 GiB 8300 Linux filesystem
# 从 2048 扇区开始存在三个连续分区,第二个分区是 SWAP,我们要想扩展 SWAP 分区,必须删除第三个分区
# 删除第三个和第二个分区
Command (? for help): d
Partition number (1-2): 3
Command (? for help): d
Command (? for help): 2
# 新建大小为 8G 的 SWAP 分区
# 为什么是 8G
# 因为我的物理内存为 8G,在 SWAP 小于物理内存的时候,会出现休眠失败的情况,也就是执行 systemctl hibernate 失败
Command (? for help): n
Partition number (2-128, default 2):2
# 选择分区号
First sector (34-62411209, default = 821248) or {+-}size{KMGTP}:
# 开始扇区,默认就好
Last sector (821248-62411209, default = 62411209) or {+-}size{KMGTP}: +8G
# 结束扇区 +8G
Hex code or GUID (L to show codes, Enter = 8300): 8200
# 分区类型 选 8200 swap,L 可查看不同的代码
Changed type of partition to 'Linux swap'
# 将剩余空间新建为根分区
Command (? for help): n
Partition number (3-128, default 3):
First sector (34-62411209, default = 17598464) or {+-}size{KMGTP}:
Last sector (17598464-62411209, default = 62411209) or {+-}size{KMGTP}:
Hex code or GUID (L to show codes, Enter = 8300):
# 结束后查看结果
p
Number Start (sector) End (sector) Size Code Name
1 2048 821247 400.0 MiB 8300 Linux filesystem
2 821248 17598463 8.0 GiB 8200 Linux swap
3 17598464 62411209 21.4 GiB 8300 Linux filesystem
# 将此结果写入到磁盘
Command (? for help): w
Do you want to proceed? (Y/N): Y
如此,新建 SWAP 分区成功。
第三步将根目录分区中的文件复制到 /dev/sdc3
2048扇区之前包含着引导信息,第一个分区包含着引导需要的文件,我们又将 SWAP 分区创建完成,如此, 只要将根目录中的文件全部放到第三个分区中就完成了镜像制作。
将镜像挂载到设备
接下来我们使用 loop 设备挂载镜像,以复制文件。
# 查找第一个可用的 loop 设备
losetup -f
# 假设得到 /dev/loop0 是第一个可用 loop 设备
# 将 loop 设备与 img 镜像关联
losetup -P loop0 debian11.min.3.img
# 其中 -P(大写p) 代表关联有分区的镜像
# 查看关联结果
lsblk
***
loop0 7:0 0 4.7G 0 loop
├─loop0p1 259:0 0 400M 0 part
├─loop0p2 259:1 0 2G 0 part
└─loop0p3 259:2 0 2G 0 part
创建目录,挂载 /dev/loop0p3
mkdir lookLoop
mount /dev/loop0p3 lookLoop
方案一(失败):将/dev/loop0p3 中的文件全部复制到 /dev/sdc3 中
先给 /dev/sdc3 创建文件系统,然后将文件复制过去。 结果,这样做会改变文件的特殊权限,比如 /usr/bin/sudo 文件的s权限,该文件的权限会从 4755 变成 755,这样导致系统损坏,
方案二(失败):使用tar打包然后解压到 /dev/sdc3 中
仍然不能保持s权限
方案三(成功): 将 /dev/loop0p3 整个复制到 /dev/sdc3 中
dd if=/dev/loop0p3 of=/dev/sdc3 bs=16M
# 再三确认,一定要注意写对磁盘路径
# 如此便可保持一些特殊文件的特殊权限
# 但是挂载后查看可知,文件系统大小仍是2G 所以我们需要扩展文件系统
# 先取消挂载
# 扩展文件系统
rsize2fs /dev/sdc3
resize2fs 1.46.2 (28-Feb-2021)
Please run 'e2fsck -f /dev/sdc3' first.
# 根据提示,先执行
e2fsck -f /dev/sdc3
# 然后
rsize2fs /dev/sdc3
# 扩展文件系统成功
# 别忘记,将 loop 设备取消挂载
# 先取消挂载
umount lookLoop
# 再接除 loop0
losetup -d /dev/loop0
这样,系统就更加适用了,愉快的使用吧!
如果在windows下,准备DiskGenius和Win32DiskImager
1. 用Win32DiskImager把镜像刷进去
以下使用DiskGenius操作
2. 删除根分区和SWAP分区,之后重新分一个SWAP和主分区,这时候选好大小(建立新分区,选主磁盘分区,文件系统类型分别选linux swap和ext4(linux))
3. 磁盘->打开虚拟磁盘文件->打开之前的镜像。
4. 工具->克隆分区,源分区选镜像的根分区,目的分区选你新的根分区,克隆就好了
大佬,怎么OMV7安装不了docker,在网上找了很多视频,都对不上号,决定还是求助你,软件源我也改了,就是在插件选项里搜索不到docker ce
装了也没用啊,docker软件的镜像也得要支持MIPS64el平台啊,得有人去编译啊
龙芯的开源平台上貌似有编译过的docker