普通视图

发现新文章,点击刷新页面。

DEB 和 RPM 有什么区别

作者 Teacher Du
2025年12月3日 00:00

在 Linux 系统中,软件的安装和管理通常依赖于软件包(Package),而 .deb 和 .rpm 是两种最主流的软件包格式。它们分别服务于不同的 Linux 发行版生态系统,不仅文件后缀不同,所使用的工具链、依赖管理方式、系统集成方式等方面也各有特点。本文将从多个角度对这两种格式进行深入解析。

基础定义

格式全称主要用途
.debDebian Binary Package用于 Debian 及其衍生系统
.rpmRPM Package Manager用于 Red Hat 等及其衍生系统

软件包管理工具的不同

操作.deb 系列.rpm 系列
低层包管理器dpkgrpm
高层包管理器apt、apt-get、gdebiyum、dnf、zypper
自动解决依赖apt 系列具备强大的自动依赖解决能力yum / dnf 支持自动依赖解析
安装命令示例sudo apt install ./xxx.deb ; sudo dpkg -i xxx.debsudo yum install xxx.rpm ; sudo rpm -ivh xxx.rpm

软件包内部结构差异

尽管 .deb 和 .rpm 都包含软件的可执行文件、元信息、安装脚本等,但它们的打包方式和控制文件结构并不相同:

1
2
3
4
5
6
7
8
9
10
11
.deb 软件包结构:
.deb 文件实际上是一个 ar 档案,包含:
├── control.tar.gz → 控制信息(如版本、依赖、脚本)
├── data.tar.gz → 软件内容(实际文件)
├── debian-binary → 版本信息(固定为2.0)
.rpm 软件包结构:
.rpm 文件是经过 CPIO 和 RPM 格式封装的结构,包含:
├── 包描述信息(名称、版本、架构等)
├── 安装/卸载脚本(%pre、%post、%preun、%postun)
├── 文件列表及路径
├── 安装数据(通过 CPIO 解包)

平台兼容性

.deb 和 .rpm 是彼此不兼容的,不同包管理器和元数据结构使它们无法直接在非原生系统中使用。但可以通过跨格式转换工具实现临时兼容;

注意:转换后的包可能在目标系统中运行异常,特别是涉及依赖项或系统级服务时。

系统集成差异

.deb 系列操作系统默认使用 systemd 或 sysvinit 管理服务,依赖包也多以 .deb 分发。

.rpm 系统通常更加倾向于企业级应用部署,具备更强的 SELinux、Firewalld 集成与限制管理。

此外,.rpm 包更早支持数字签名验证(GPG 签名),而 .deb 也已在 apt 中引入类似机制。

使用场景与生态对比

项目.deb 系列(如 Ubuntu、麒麟桌面、统信桌面).rpm 系列(如 openEuler、麒麟服务器、统信服务器)
使用人群个人用户、国产桌面操作系统用户居多企业级、服务器、运维自动化场景多见
系统更新频率快,偏向社区活跃发展稳定,重视长期支持(LTS)版本
支持工具apt, dpkgyum, dnf, rpm, zypper

Dockerd 日志太多?磁盘爆了?一篇教您搞定容器日志问题

作者 Teacher Du
2025年11月15日 00:00

Docker 重度使用者们,您了解过 Docker 日志吗?如何查找、减少以及管理日志,从而有效节省磁盘空间!今天分享一下如何处理 Docker 日志的问题。

日志好坑

Docker 默认使用的是 json-file 日志驱动。日志会一直写,没有限制、没有轮转、没有清理!日志默认位置:

1
/var/lib/docker/containers/<container-id>/<container-id>-json.log

当您发现它时,可能已经:

1
2
3
4
IO 等待时间长
占了几十个 G
吃满磁盘
服务挂了

处理问题

主要通过日志轮询方式处理,下面介绍两种方式设置日志轮询。在运行容器时设置轮转策略:

1
2
3
4
5
6
docker run -d \
--name myapp \
--log-driver json-file \
--log-opt max-size=10m \
--log-opt max-file=3 \
myapp:latest

参数解释:

参数解释
max-size=10m单日志文件最大 10MB
max-file=3最多保留 3 个轮转文件,容器总日志控制在 30MB 内

修改 Docker 的配置,该配置适用于所有容器,编辑 Docker 配置文件/etc/docker/daemon.json:

1
2
3
4
5
6
7
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "5"
}
}

重启下 Docker 服务,注意只对之后创建的容器生效!

1
systemctl restart docker

日志清理

正运行的容器,可以这样快速清理日志「生产环境慎用」

1
echo "" > $(docker inspect --format='{{.LogPath}}' <container-id>)

或者更稳一点:

命令解释
docker stop停掉容器
docker rm删除容器

禁用日志输出,这个操作慎用,有可能到影响应用运行,而且不方便后续的排查:

1
docker run --log-driver=none <container-id>

日志快速清理,仅推荐在磁盘告急临时使用:

1
find /var/lib/docker/containers -name *-json.log -exec truncate -s 0 {} \;

实战建议

根据不同的场景推荐配置值:

场景配置值一配置值二
开发环境max-size=5mmax-file=3
测试环境max-size=10mmax-file=5
生产环境max-size=50mmax-file=10

最佳实践:

1
2
3
用 json-file+max-size+max-file
修改 daemon.json 设置全局默认值
旧的容器要么清理日志,要么重启带有轮转参数

在银河麒麟桌面操作系统 ARM 版上安装 KVM 虚拟化

作者 Teacher Du
2025年8月17日 00:00

KVM 是一种开源全虚拟化解决方案,能够在 Linux 系统运行多个操作系统。本文将详细介绍如何在银河麒麟桌面操作系统 ARM 版安装 KVM 虚拟化环境,帮助用户搭建高效的虚拟化平台。

准备工作

  1. 硬件要求

确保 ARM 架构设备支持虚拟化技术。通常,支持虚拟化的 ARM 处理器会支持硬件辅助虚拟化功能。

系统至少需要 4GB 内存和 20GB 的硬盘空间。

  1. 软件要求

银河麒麟桌面操作系统 ARM 版「如 V10」

KVM 虚拟化相关的软件包。

安装 KVM 虚拟化环境

  1. 安装 KVM 和相关工具
1
2
sudo apt update
sudo apt -y install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager

注意:在银河麒麟桌面操作系统 ARM 版上,可以通过上面命令安装 KVM 和相关工具。

  1. 包的作用

上面软件包的作用如下:

包名作用
qemu-kvm提供 KVM 虚拟化核心功能
libvirt-daemon-system用于管理虚拟机的后端服务
libvirt-clients提供客户端工具管理虚拟机
bridge-utils用于配置网络桥接
virt-manager提供图形化界面管理虚拟机
  1. 添加用户到 libvirt 组内
1
sudo usermod -aG libvirt $(whoami)

注意:为方便管理虚拟机,需要将当前用户添加到 libvirt 组,然后注销重新登录,使组成员关系生效。

  1. 验证是否安装成功
1
virsh --version

注意:运行上面命令来检查 KVM 是否正常工作,如果返回版本信息,说明 KVM 安装成功了。

创建 KVM 虚拟机

  1. 下载镜像

可以从银河麒麟官方网站下载适合 ARM 架构的虚拟机镜像文件。

Kylin-Desktop-V10-SP1-2403-Release-20240430-arm64.iso 文件。

  1. 创建虚拟磁盘
1
qemu-img create -f qcow2 /path/to/disk.img 50G

注意:使用上面命令创建虚拟磁盘。其中/path/to/disk.img 是虚拟磁盘路径,50G 表示磁盘的大小。

  1. 启动 KVM 虚拟机安装
1
qemu-system-aarch64 -m 2048 -cpu cortex-a76 -smp 4 -M virt -bios /path/to/QEMU_EFI.fd -device VGA -device nec-usb-xhci -device usb-mouse -device usb-kbd -drive if=none,file=/path/to/disk.img,id=hd0 -device virtio-blk-device,drive=hd0 -drive if=none,file=/path/to/Kylin-Desktop-V10-SP1-2403-Release-20240430-arm64.iso,id=cdrom,media=cdrom -device virtio-scsi-device -device scsi-cd,drive=cdrom

注意:使用上面命令启动 KVM 虚拟机安装。其中-m 2048 分配 2048MB 内存;-cpu cortex-a76 指定 CPU 类型;-smp 4 是指定虚拟 CPU 核心数。

  1. 完成安装

按照虚拟机安装界面的提示完成安装过程。

安装完成后 KVM 虚拟机将自动重启。

使用 KVM 管理虚拟机

  1. 使用 virsh 命令行工具

列出所有 KVM 虚拟机:

1
virsh list --all

启动 KVM 虚拟机:

1
virsh start <KVM 虚拟机名称>

关闭 KVM 虚拟机:

1
virsh shutdown <KVM 虚拟机名称>

强制停止 KVM 虚拟机:

1
virsh destroy <KVM 虚拟机名称>

挂起 KVM 虚拟机:

1
virsh suspend <KVM 虚拟机名称>

恢复挂起 KVM 虚拟机:

1
virsh resume <KVM 虚拟机名称>
  1. 使用 virt-manager 图形化界面

virt-manager 提供了一个直观的图形化界面,方便用户管理 KVM 虚拟机。

启动 virt-manager 后,可以连接到本地或者远程的 KVM 服务器,创建、启动、停止 KVM 虚拟机。

昨天以前首页

DEB 和 RPM 有什么区别

作者 Teacher Du
2025年12月3日 00:00

在 Linux 系统中,软件的安装和管理通常依赖于软件包(Package),而 .deb 和 .rpm 是两种最主流的软件包格式。它们分别服务于不同的 Linux 发行版生态系统,不仅文件后缀不同,所使用的工具链、依赖管理方式、系统集成方式等方面也各有特点。本文将从多个角度对这两种格式进行深入解析。

基础定义

格式全称主要用途
.debDebian Binary Package用于 Debian 及其衍生系统
.rpmRPM Package Manager用于 Red Hat 等及其衍生系统

软件包管理工具的不同

操作.deb 系列.rpm 系列
低层包管理器dpkgrpm
高层包管理器apt、apt-get、gdebiyum、dnf、zypper
自动解决依赖apt 系列具备强大的自动依赖解决能力yum / dnf 支持自动依赖解析
安装命令示例sudo apt install ./xxx.deb ; sudo dpkg -i xxx.debsudo yum install xxx.rpm ; sudo rpm -ivh xxx.rpm

软件包内部结构差异

尽管 .deb 和 .rpm 都包含软件的可执行文件、元信息、安装脚本等,但它们的打包方式和控制文件结构并不相同:

1
2
3
4
5
6
7
8
9
10
11
.deb 软件包结构:
.deb 文件实际上是一个 ar 档案,包含:
├── control.tar.gz → 控制信息(如版本、依赖、脚本)
├── data.tar.gz → 软件内容(实际文件)
├── debian-binary → 版本信息(固定为2.0)
.rpm 软件包结构:
.rpm 文件是经过 CPIO 和 RPM 格式封装的结构,包含:
├── 包描述信息(名称、版本、架构等)
├── 安装/卸载脚本(%pre、%post、%preun、%postun)
├── 文件列表及路径
├── 安装数据(通过 CPIO 解包)

平台兼容性

.deb 和 .rpm 是彼此不兼容的,不同包管理器和元数据结构使它们无法直接在非原生系统中使用。但可以通过跨格式转换工具实现临时兼容;

注意:转换后的包可能在目标系统中运行异常,特别是涉及依赖项或系统级服务时。

系统集成差异

.deb 系列操作系统默认使用 systemd 或 sysvinit 管理服务,依赖包也多以 .deb 分发。

.rpm 系统通常更加倾向于企业级应用部署,具备更强的 SELinux、Firewalld 集成与限制管理。

此外,.rpm 包更早支持数字签名验证(GPG 签名),而 .deb 也已在 apt 中引入类似机制。

使用场景与生态对比

项目.deb 系列(如 Ubuntu、麒麟桌面、统信桌面).rpm 系列(如 openEuler、麒麟服务器、统信服务器)
使用人群个人用户、国产桌面操作系统用户居多企业级、服务器、运维自动化场景多见
系统更新频率快,偏向社区活跃发展稳定,重视长期支持(LTS)版本
支持工具apt, dpkgyum, dnf, rpm, zypper

Dockerd 日志太多?磁盘爆了?一篇教您搞定容器日志问题

作者 Teacher Du
2025年11月15日 00:00

Docker 重度使用者们,您了解过 Docker 日志吗?如何查找、减少以及管理日志,从而有效节省磁盘空间!今天分享一下如何处理 Docker 日志的问题。

日志好坑

Docker 默认使用的是 json-file 日志驱动。日志会一直写,没有限制、没有轮转、没有清理!日志默认位置:

1
/var/lib/docker/containers/<container-id>/<container-id>-json.log

当您发现它时,可能已经:

1
2
3
4
IO 等待时间长
占了几十个 G
吃满磁盘
服务挂了

处理问题

主要通过日志轮询方式处理,下面介绍两种方式设置日志轮询。在运行容器时设置轮转策略:

1
2
3
4
5
6
docker run -d \
--name myapp \
--log-driver json-file \
--log-opt max-size=10m \
--log-opt max-file=3 \
myapp:latest

参数解释:

参数解释
max-size=10m单日志文件最大 10MB
max-file=3最多保留 3 个轮转文件,容器总日志控制在 30MB 内

修改 Docker 的配置,该配置适用于所有容器,编辑 Docker 配置文件/etc/docker/daemon.json:

1
2
3
4
5
6
7
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "5"
}
}

重启下 Docker 服务,注意只对之后创建的容器生效!

1
systemctl restart docker

日志清理

正运行的容器,可以这样快速清理日志「生产环境慎用」

1
echo "" > $(docker inspect --format='{{.LogPath}}' <container-id>)

或者更稳一点:

命令解释
docker stop停掉容器
docker rm删除容器

禁用日志输出,这个操作慎用,有可能到影响应用运行,而且不方便后续的排查:

1
docker run --log-driver=none <container-id>

日志快速清理,仅推荐在磁盘告急临时使用:

1
find /var/lib/docker/containers -name *-json.log -exec truncate -s 0 {} \;

实战建议

根据不同的场景推荐配置值:

场景配置值一配置值二
开发环境max-size=5mmax-file=3
测试环境max-size=10mmax-file=5
生产环境max-size=50mmax-file=10

最佳实践:

1
2
3
用 json-file+max-size+max-file
修改 daemon.json 设置全局默认值
旧的容器要么清理日志,要么重启带有轮转参数

在银河麒麟桌面操作系统 ARM 版上安装 KVM 虚拟化

作者 Teacher Du
2025年8月17日 00:00

KVM 是一种开源全虚拟化解决方案,能够在 Linux 系统运行多个操作系统。本文将详细介绍如何在银河麒麟桌面操作系统 ARM 版安装 KVM 虚拟化环境,帮助用户搭建高效的虚拟化平台。

准备工作

  1. 硬件要求

确保 ARM 架构设备支持虚拟化技术。通常,支持虚拟化的 ARM 处理器会支持硬件辅助虚拟化功能。

系统至少需要 4GB 内存和 20GB 的硬盘空间。

  1. 软件要求

银河麒麟桌面操作系统 ARM 版「如 V10」

KVM 虚拟化相关的软件包。

安装 KVM 虚拟化环境

  1. 安装 KVM 和相关工具
1
2
sudo apt update
sudo apt -y install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager

注意:在银河麒麟桌面操作系统 ARM 版上,可以通过上面命令安装 KVM 和相关工具。

  1. 包的作用

上面软件包的作用如下:

包名作用
qemu-kvm提供 KVM 虚拟化核心功能
libvirt-daemon-system用于管理虚拟机的后端服务
libvirt-clients提供客户端工具管理虚拟机
bridge-utils用于配置网络桥接
virt-manager提供图形化界面管理虚拟机
  1. 添加用户到 libvirt 组内
1
sudo usermod -aG libvirt $(whoami)

注意:为方便管理虚拟机,需要将当前用户添加到 libvirt 组,然后注销重新登录,使组成员关系生效。

  1. 验证是否安装成功
1
virsh --version

注意:运行上面命令来检查 KVM 是否正常工作,如果返回版本信息,说明 KVM 安装成功了。

创建 KVM 虚拟机

  1. 下载镜像

可以从银河麒麟官方网站下载适合 ARM 架构的虚拟机镜像文件。

Kylin-Desktop-V10-SP1-2403-Release-20240430-arm64.iso 文件。

  1. 创建虚拟磁盘
1
qemu-img create -f qcow2 /path/to/disk.img 50G

注意:使用上面命令创建虚拟磁盘。其中/path/to/disk.img 是虚拟磁盘路径,50G 表示磁盘的大小。

  1. 启动 KVM 虚拟机安装
1
qemu-system-aarch64 -m 2048 -cpu cortex-a76 -smp 4 -M virt -bios /path/to/QEMU_EFI.fd -device VGA -device nec-usb-xhci -device usb-mouse -device usb-kbd -drive if=none,file=/path/to/disk.img,id=hd0 -device virtio-blk-device,drive=hd0 -drive if=none,file=/path/to/Kylin-Desktop-V10-SP1-2403-Release-20240430-arm64.iso,id=cdrom,media=cdrom -device virtio-scsi-device -device scsi-cd,drive=cdrom

注意:使用上面命令启动 KVM 虚拟机安装。其中-m 2048 分配 2048MB 内存;-cpu cortex-a76 指定 CPU 类型;-smp 4 是指定虚拟 CPU 核心数。

  1. 完成安装

按照虚拟机安装界面的提示完成安装过程。

安装完成后 KVM 虚拟机将自动重启。

使用 KVM 管理虚拟机

  1. 使用 virsh 命令行工具

列出所有 KVM 虚拟机:

1
virsh list --all

启动 KVM 虚拟机:

1
virsh start <KVM 虚拟机名称>

关闭 KVM 虚拟机:

1
virsh shutdown <KVM 虚拟机名称>

强制停止 KVM 虚拟机:

1
virsh destroy <KVM 虚拟机名称>

挂起 KVM 虚拟机:

1
virsh suspend <KVM 虚拟机名称>

恢复挂起 KVM 虚拟机:

1
virsh resume <KVM 虚拟机名称>
  1. 使用 virt-manager 图形化界面

virt-manager 提供了一个直观的图形化界面,方便用户管理 KVM 虚拟机。

启动 virt-manager 后,可以连接到本地或者远程的 KVM 服务器,创建、启动、停止 KVM 虚拟机。

❌
❌