调整龙芯3A2000C的Debian镜像使它更适应你的硬件

作者: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

这样,系统就更加适用了,愉快的使用吧!

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据