第 9 章。系统技巧

目录

9.1. screen 程序
9.1.1. screen(1) 的使用场景
9.1.2. screen 命令的快捷键绑定
9.2. 数据记录和呈现
9.2.1. 日志守护进程
9.2.2. 日志分析器
9.2.3. 清理地记录 shell 活动
9.2.4. 定制文本数据的显示
9.2.5. 定制时间和日期的显示
9.2.6. 彩色化的 shell 回显
9.2.7. 彩色化的命令
9.2.8. 记录编辑器活动以进行复杂重复操作
9.2.9. 记录 X 应用程序的图形图像
9.2.10. 记录配置文件的更改
9.3. 数据存储技巧
9.3.1. 磁盘空间使用情况
9.3.2. 磁盘分区配置
9.3.3. 使用 UUID 访问分区
9.3.4. 文件系统配置
9.3.5. 文件系统创建和完整性检查
9.3.6. 通过挂载选项优化文件系统
9.3.7. 通过超级块优化文件系统
9.3.8. 硬盘优化
9.3.9. 固态硬盘优化
9.3.10. 使用 SMART 预测硬盘故障
9.3.11. 通过 LVM 扩展可用存储空间
9.3.12. 通过挂载另一个分区扩展可用存储空间
9.3.13. 通过绑定挂载另一个目录扩展可用存储空间
9.3.14. 通过符号链接扩展可用存储空间
9.3.15. 通过 aufs 扩展可用存储空间
9.4. 数据加密技巧
9.4.1. 使用 dm-crypt/LUKS 加密可移动磁盘
9.4.2. 使用 dm-crypt 加密交换分区
9.4.3. 使用 eCryptfs 自动加密文件
9.4.4. 自动挂载 eCryptfs
9.5. 监控、控制和启动程序活动
9.5.1. 为进程计时
9.5.2. 调度优先级
9.5.3. ps 命令
9.5.4. top 命令
9.5.5. 列出进程打开的文件
9.5.6. 跟踪程序活动
9.5.7. 识别使用文件或套接字的进程
9.5.8. 以恒定间隔重复命令
9.5.9. 循环处理文件重复命令
9.5.10. 从 GUI 启动程序
9.5.11. 定制要启动的程序
9.5.12. 终止进程
9.5.13. 调度一次性任务
9.5.14. 定期调度任务
9.5.15. Alt-SysRq 键
9.6. 系统维护技巧
9.6.1. 谁在使用系统?
9.6.2. 警告所有人
9.6.3. 硬件识别
9.6.4. 硬件配置
9.6.5. 系统和硬件时间
9.6.6. 终端配置
9.6.7. 声音基础设施
9.6.8. 禁用屏幕保护程序
9.6.9. 禁用蜂鸣声
9.6.10. 内存使用情况
9.6.11. 系统安全和完整性检查
9.7. 内核
9.7.1. Linux 内核 2.6
9.7.2. 内核参数
9.7.3. 内核头文件
9.7.4. 编译内核和相关模块
9.7.5. 编译内核源码:Debian 内核团队建议
9.7.6. 非自由硬件驱动程序
9.8. 虚拟化系统
9.8.1. 虚拟化工具
9.8.2. 虚拟化工作流程
9.8.3. 挂载虚拟磁盘镜像文件
9.8.4. Chroot 系统
9.8.5. 多桌面系统

在这里,我描述了配置和管理系统的基本技巧,主要来自控制台。

9.1. screen 程序

screen(1) 是一个非常有用的工具,适用于通过不可靠或间歇性连接访问远程站点的人员,因为它支持中断的网络连接。

表 9.1. 支持中断网络连接的程序列表

软件包 popcon 大小 描述
screen http://qa.debian.org/popcon.php?package=screen 952 带有 VT100/ANSI 终端仿真的终端多路复用器

9.1.1. screen(1) 的使用场景

screen(1) 不仅允许一个终端窗口处理多个进程,而且还允许 远程 shell 进程在中断连接后继续存活。以下是 screen(1) 的典型使用场景。

  1. 您登录到远程机器。

  2. 您在单个控制台上启动 screen

  3. 您在用 ^A c(“Control-A”后跟“c”)创建的 screen 窗口中执行多个程序。

  4. 您通过 ^A n(“Control-A”后跟“n”)在多个 screen 窗口之间切换。

  5. 突然您需要离开终端,但您不想通过保持连接来丢失您的活动工作。

  6. 您可以通过任何方法 分离 screen 会话。

    • 粗暴地拔掉您的网络连接

    • 输入 ^A d(“Control-A”后跟“d”)并手动从远程连接注销

    • 输入 ^A DD(“Control-A”后跟“DD”)以使 screen 分离并注销您

  7. 您再次登录到同一远程机器(甚至从不同的终端)。

  8. 您以“screen -r”启动 screen

  9. screen 神奇地 重新连接 所有之前的 screen 窗口以及所有正在运行的程序。

[Tip] 提示

对于按流量计费的网络连接(如拨号和数据包连接),您可以使用 screen 节省连接费用,因为您可以使进程在断开连接时保持活动状态,然后在再次连接时重新连接它。

9.1.2. screen 命令的快捷键绑定

screen 会话中,所有键盘输入都会发送到您当前的窗口,命令快捷键除外。所有 screen 命令快捷键都是通过键入 ^A(“Control-A”)加上一个键[加上任何参数]来输入的。以下是需要记住的重要快捷键。

表 9.2. screen 的快捷键绑定列表

快捷键绑定 含义
^A ? 显示帮助屏幕(显示快捷键绑定)
^A c 创建一个新窗口并切换到它
^A n 转到下一个窗口
^A p 转到上一个窗口
^A 0 转到窗口编号 0
^A 1 转到窗口编号 1
^A w 显示窗口列表
^A a 将 Ctrl-A 作为键盘输入发送到当前窗口
^A h 将当前窗口的硬拷贝写入文件
^A H 开始/结束将当前窗口记录到文件
^A ^X 锁定终端(密码保护)
^A d 从终端分离 screen 会话
^A DD 分离 screen 会话并注销

有关详细信息,请参阅 screen(1)

9.2. 数据记录和呈现

9.2.1. 日志守护进程

许多程序将其活动记录在“/var/log/”目录下。

  • 内核日志守护进程:klogd(8)

  • 系统日志守护进程:rsyslogd(8)

请参阅 第 3.5.9 节,“系统消息”第 3.5.10 节,“内核消息”

9.2.2. 日志分析器

以下是值得注意的日志分析器(aptitude(8) 中的“~Gsecurity::log-analyzer”)。

表 9.3. 系统日志分析器列表

软件包 popcon 大小 描述
logwatch http://qa.debian.org/popcon.php?package=logwatch 2018 日志分析器,用 Perl 编写,输出美观
fail2ban http://qa.debian.org/popcon.php?package=fail2ban 414 禁止导致多次身份验证错误的 IP
analog http://qa.debian.org/popcon.php?package=analog 3187 Web 服务器日志分析器
awstats http://qa.debian.org/popcon.php?package=awstats 3101 功能强大且功能丰富的 Web 服务器日志分析器
sarg http://qa.debian.org/popcon.php?package=sarg 921 squid 分析报告生成器
pflogsumm http://qa.debian.org/popcon.php?package=pflogsumm 133 Postfix 日志条目摘要器
syslog-summary http://qa.debian.org/popcon.php?package=syslog-summary 84 总结 syslog 日志文件的内容
lire http://qa.debian.org/popcon.php?package=lire 5040 功能齐全的日志分析器和报告生成器
fwlogwatch http://qa.debian.org/popcon.php?package=fwlogwatch 440 防火墙日志分析器
squidview http://qa.debian.org/popcon.php?package=squidview 193 监控和分析 squid access.log 文件
visitors http://qa.debian.org/popcon.php?package=visitors 293 快速 Web 服务器日志分析器
swatch http://qa.debian.org/popcon.php?package=swatch 112 日志文件查看器,具有 regexp 匹配、高亮显示和挂钩
crm114 http://qa.debian.org/popcon.php?package=crm114 1065 可控正则表达式破坏器和垃圾邮件过滤器 (CRM114)
icmpinfo http://qa.debian.org/popcon.php?package=icmpinfo 84 解释 ICMP 消息

[Note] 注意

CRM114 提供了语言基础设施,可以使用 TRE regex 库 编写 模糊 过滤器。它最流行的用途是垃圾邮件过滤器,但也可以用作日志分析器。

9.2.3. 清理地记录 shell 活动

简单地使用 script(1)(请参阅 第 1.4.9 节,“记录 shell 活动”)来记录 shell 活动会生成一个带有控制字符的文件。通过使用 col(1) 可以避免这种情况,如下所示。

$ script
Script started, file is typescript

执行任何操作…并按 Ctrl-D 退出 script

$ col -bx <typescript >cleanedfile
$ vim cleanedfile

如果您没有 script(例如,在 initramfs 中的引导过程中),则可以改用以下方法。

$ sh -i 2>&1 | tee typescript
[Tip] 提示

一些 x-terminal-emulator,如 gnome-terminal,可以记录。您可能希望扩展回滚的行缓冲区。

[Tip] 提示

您可以使用 screen(1) 和“^A H”(请参阅 第 9.1.2 节,“screen 命令的快捷键绑定”)来执行控制台记录。

[Tip] 提示

您可以使用 emacs(1) 和“M-x shell”、“M-x eshell”或“M-x term”来执行控制台记录。您稍后可以使用“C-x C-w”将缓冲区写入文件。

9.2.4. 定制文本数据的显示

虽然分页工具(如 more(1)less(1)(请参阅 第 1.4.5 节,“分页器”))以及用于高亮显示和格式化的自定义工具(请参阅 第 11.1.8 节,“高亮显示和格式化纯文本数据”))可以很好地显示文本数据,但通用编辑器(请参阅 第 1.4.6 节,“文本编辑器”))是最通用和可定制的。

[Tip] 提示

对于 vim(1) 及其分页模式别名 view(1),“:set hls”启用高亮显示搜索。

9.2.5. 定制时间和日期的显示

ls -l”命令的时间和日期的默认显示格式取决于 locale(有关值,请参阅 第 1.2.6 节,“时间戳”)。首先引用“$LANG”变量,并且可以使用“$LC_TIME”变量覆盖它。

每个 locale 的实际默认显示格式取决于所使用的标准 C 库(libc6 软件包)的版本。即,不同版本的 Debian 具有不同的默认值。

如果您真的希望在 locale 之外定制此时间和日期的显示格式,则应通过“--time-style”参数或通过“$TIME_STYLE”值设置 时间样式值(请参阅 ls(1)date(1)、“info coreutils 'ls invocation'”)。

表 9.4. “ls -l”命令在 lenny 中的时间和日期显示示例

时间样式值 locale 时间和日期的显示
iso 任何 01-19 00:15
long-iso 任何 2009-01-19 00:15
full-iso 任何 2009-01-19 00:15:16.000000000 +0900
locale C Jan 19 00:15
locale en_US.UTF-8 2009-01-19 00:15
locale es_ES.UTF-8 ene 19 00:15
+%d.%m.%y %H:%M 任何 19.01.09 00:15
+%d.%b.%y %H:%M Cen_US.UTF-8 19.Jan.09 00:15
+%d.%b.%y %H:%M es_ES.UTF-8 19.ene.09 00:15

[Tip] 提示

您可以使用命令别名消除在命令行上键入长选项,例如“alias ls='ls --time-style=+%d.%m.%y\ %H:%M'”(请参阅 第 1.5.9 节,“命令别名”)。

[Tip] 提示

ISO 8601 用于这些 iso 格式。

9.2.6. 彩色化的 shell 回显

使用 ANSI 转义码(请参阅“/usr/share/doc/xterm/ctlseqs.txt.gz”),可以将 shell 回显彩色化为大多数现代终端。

例如,尝试以下操作

$ RED=$(printf "\x1b[31m")
$ NORMAL=$(printf "\x1b[0m")
$ REVERSE=$(printf "\x1b[7m")
$ echo "${RED}RED-TEXT${NORMAL} ${REVERSE}REVERSE-TEXT${NORMAL}"

9.2.7. 彩色化的命令

彩色化的命令对于在交互式环境中检查其输出非常方便。我将以下内容包含在我的“~/.bashrc”中。

if [ "$TERM" != "dumb" ]; then
    eval "`dircolors -b`"
    alias ls='ls --color=always'
    alias ll='ls --color=always -l'
    alias la='ls --color=always -A'
    alias less='less -R'
    alias ls='ls --color=always'
    alias grep='grep --color=always'
    alias egrep='egrep --color=always'
    alias fgrep='fgrep --color=always'
    alias zgrep='zgrep --color=always'
else
    alias ll='ls -l'
    alias la='ls -A'
fi

别名的使用将颜色效果限制为交互式命令使用。它比导出环境变量“export GREP_OPTIONS='--color=auto'”具有优势,因为在分页程序(如 less(1))下可以看到颜色。如果您希望在管道传输到其他程序时抑制颜色,请在上面的“~/.bashrc”示例中使用“--color=auto”代替。

[Tip] 提示

您可以通过使用“TERM=dumb bash”调用 shell 来在交互式环境中关闭这些彩色化别名。

9.2.8. 记录编辑器活动以进行复杂重复操作

您可以记录编辑器活动以进行复杂重复操作。

对于 Vim,如下所示。

  • qa”:开始将键入的字符记录到名为“a”的寄存器中。

  • … 编辑器活动

  • q”:结束记录键入的字符。

  • @a”:执行寄存器“a”的内容。

对于 Emacs,如下所示。

  • C-x (”:开始定义键盘宏。

  • … 编辑器活动

  • C-x )”:结束定义键盘宏。

  • C-x e”:执行键盘宏。

9.2.9. 记录 X 应用程序的图形图像

有几种方法可以记录 X 应用程序的图形图像,包括 xterm 显示。


9.2.10. 记录配置文件的更改

有一些专门的工具可以借助 DVCS 系统记录配置文件的更改。

表 9.6. 在 VCS 中记录配置历史记录的软件包列表

软件包 popcon 大小 描述
etckeeper http://qa.debian.org/popcon.php?package=etckeeper 242 使用 Git(默认)、MercurialBazaar(新)存储配置文件及其元数据
changetrack http://qa.debian.org/popcon.php?package=changetrack 148 使用 RCS(旧)存储配置文件

我建议将 etckeeper 软件包与 git(1) 一起使用,它将整个“/etc”置于 VCS 控制之下。其安装指南和教程可在“/usr/share/doc/etckeeper/README.gz”中找到。

本质上,运行“sudo etckeeper init”会为“/etc”初始化 git 存储库,就像 第 10.9.5 节,“使用 Git 记录配置历史记录” 中解释的过程一样,但带有特殊的挂钩脚本以进行更彻底的设置。

在您更改配置时,您可以像往常一样使用 git(1) 来记录它们。它还在您每次运行软件包管理命令时自动记录更改。

[Tip] 提示

您可以通过执行“sudo GIT_DIR=/etc/.git gitk”来浏览“/etc”的更改历史记录,以清晰地查看新安装的软件包、已删除的软件包和软件包的版本更改。

9.3. 数据存储技巧

使用 Linux live CDdebian-installer CD 在救援模式下启动系统,您可以轻松地重新配置引导设备上的数据存储。另请参阅 第 10.3 节,“二进制数据”

9.3.1. 磁盘空间使用情况

磁盘空间使用情况可以通过 mountcoreutilsxdu 软件包提供的程序进行评估

  • mount(8) 报告所有已挂载的文件系统(= 磁盘)。

  • df(1) 报告文件系统的磁盘空间使用情况。

  • du(1) 报告目录树的磁盘空间使用情况。

[Tip] 提示

您可以将 du(8) 的输出馈送到 xdu(1x),以使用“du -k . |xdu”、“sudo du -k -x / |xdu”等生成其图形化和交互式演示。

9.3.2. 磁盘分区配置

对于 磁盘分区 配置,虽然 fdisk(8) 一直被认为是标准工具,但 parted(8) 也值得关注。“磁盘分区数据”、“分区表”、“分区映射”和“磁盘标签”都是同义词。

大多数 PC 使用经典的 主引导记录 (MBR) 方案将 磁盘分区 数据保存在第一个扇区中,即 LBA 扇区 0(512 字节)。

[Note] 注意

一些带有 可扩展固件接口 (EFI) 的新 PC,包括基于 Intel 的 Mac,使用 GUID 分区表 (GPT) 方案将 磁盘分区 数据保存在第一个扇区之外。

虽然 fdisk(8) 一直是磁盘分区工具的标准,但 parted(8) 正在取代它。

表 9.7. 磁盘分区管理软件包列表

软件包 popcon 大小 GPT 描述
util-linux http://qa.debian.org/popcon.php?package=util-linux 1593 不支持 杂项系统实用程序,包括 fdisk(8)cfdisk(8)
parted http://qa.debian.org/popcon.php?package=parted 262 支持 GNU Parted 磁盘分区大小调整程序
gparted http://qa.debian.org/popcon.php?package=gparted 5074 支持 基于 libparted 的 GNOME 分区编辑器
gnu-fdisk http://qa.debian.org/popcon.php?package=gnu-fdisk 215 支持 控制台 fdisk(8)cfdisk(8) 等的 GNU 替代品。
gdisk http://qa.debian.org/popcon.php?package=gdisk 636 支持 用于 GPT 磁盘的分区编辑器
gptsync http://qa.debian.org/popcon.php?package=gptsync 72 支持 将经典 MBR 分区表与 GPT 分区表同步
kpartx http://qa.debian.org/popcon.php?package=kpartx 104 支持 用于为分区创建设备映射的程序

[Caution] 注意

虽然 parted(8) 声称也可以创建和调整文件系统大小,但使用维护最好的专用工具(如 mkfs(8) (mkfs.msdos(8)mkfs.ext2(8)mkfs.ext3(8), …) 和 resize2fs(8))执行此类操作更安全。

[Note] 注意

为了在 GPTMBR 之间切换,您需要直接擦除磁盘内容的前几个块(请参阅 第 10.3.6 节,“清除文件内容”)并使用“parted /dev/sdx mklabel gpt”或“parted /dev/sdx mklabel msdos”进行设置。请注意,此处使用“msdos”表示 MBR

9.3.3. 使用 UUID 访问分区

虽然重新配置分区或可移动存储介质的激活顺序可能会产生不同的分区名称,但您可以一致地访问它们。如果您有多个磁盘并且您的 BIOS 没有为它们提供一致的设备名称,这也很有帮助。

[Tip] 提示

您可以使用 blkid(8) 探测块特殊设备的 UUID

[Tip] 提示

如果需要,可以使用 udev 规则使可移动存储介质等设备的设备节点保持静态。请参阅 第 3.5.11 节,“udev 系统”

9.3.4. 文件系统配置

对于 ext3 文件系统,e2fsprogs 软件包提供以下内容。

  • mkfs.ext3(8) 用于创建新的 ext3 文件系统

  • fsck.ext3(8) 用于检查和修复现有的 ext3 文件系统

  • tune2fs(8) 用于配置 ext3 文件系统的超级块

mkfs(8)fsck(8) 命令由 e2fsprogs 软件包作为各种文件系统相关程序(mkfs.fstypefsck.fstype)的前端提供。对于 ext3 文件系统,它们是 mkfs.ext3(8)fsck.ext3(8)(它们硬链接到 mke2fs(8)e2fsck(8))。

类似的命令可用于 Linux 支持的每个文件系统。

表 9.8. 文件系统管理软件包列表

软件包 popcon 大小 描述
e2fsprogs http://qa.debian.org/popcon.php?package=e2fsprogs 2233 用于 ext2/ext3/ext4 文件系统的实用程序
reiserfsprogs http://qa.debian.org/popcon.php?package=reiserfsprogs 1200 用于 Reiserfs 文件系统的实用程序
dosfstools http://qa.debian.org/popcon.php?package=dosfstools 162 用于 FAT 文件系统的实用程序。(Microsoft:MS-DOS、Windows)
xfsprogs http://qa.debian.org/popcon.php?package=xfsprogs 3135 用于 XFS 文件系统的实用程序。(SGI:IRIX)
ntfsprogs http://qa.debian.org/popcon.php?package=ntfsprogs 41 用于 NTFS 文件系统的实用程序。(Microsoft:Windows NT, …)
jfsutils http://qa.debian.org/popcon.php?package=jfsutils 1024 用于 JFS 文件系统的实用程序。(IBM:AIX、OS/2)
reiser4progs http://qa.debian.org/popcon.php?package=reiser4progs 1296 用于 Reiser4 文件系统的实用程序
hfsprogs http://qa.debian.org/popcon.php?package=hfsprogs 317 用于 HFSHFS Plus 文件系统的实用程序。(Apple:Mac OS)
btrfs-tools http://qa.debian.org/popcon.php?package=btrfs-tools 2061 用于 Btrfs 文件系统的实用程序
zerofree http://qa.debian.org/popcon.php?package=zerofree 47 从 ext2/3 文件系统中将空闲块清零的程序

[Tip] 提示

Ext4 文件系统是 Linux 系统的默认文件系统,强烈建议使用它,除非您有某些特定原因不使用。

[Tip] 提示

Btrfs 文件系统在 Linux 内核 3.2 (Debian wheezy) 中可用。预计它将成为继 ext4 文件系统之后的下一个默认文件系统。

[Warning] 警告

在 Btrfs 文件系统获得内核空间的在线 fsck(8) 功能和引导加载程序支持之前,您尚不应将其用于您的关键数据。

[Tip] 提示

一些工具允许在没有 Linux 内核支持的情况下访问文件系统(请参阅第 10.3.2 节,“在不挂载磁盘的情况下操作文件”)。

9.3.5. 文件系统创建和完整性检查

mkfs(8) 命令在 Linux 系统上创建文件系统。fsck(8) 命令在 Linux 系统上提供文件系统完整性检查和修复。

[Caution] 注意

通常在已挂载的文件系统上运行 fsck 是不安全的。

[Tip] 提示

检查 “/var/log/fsck/” 中的文件以查看从启动脚本运行的 fsck(8) 命令的结果。

[Tip] 提示

使用 “shutdown -F -r now” 强制在重启时安全地在包括根文件系统在内的所有文件系统上运行 fsck(8) 命令。 有关更多信息,请参阅 shutdown(8) 手册页。

9.3.6. 通过挂载选项优化文件系统

可以通过在其上使用的挂载选项来优化文件系统的性能和特性(请参阅 fstab(5)mount(8))。 值得注意的选项如下。

  • defaults” 选项意味着默认选项:“rw,suid,dev,exec,auto,nouser,async”。 (通用)

  • noatime” 或 “relatime” 选项对于加速读取访问非常有效。(通用)

  • user” 选项允许普通用户挂载文件系统。 此选项隐含 “noexec,nosuid,nodev” 选项组合。(通用,用于 CD 和软盘)

  • noexec,nodev,nosuid” 选项组合用于增强安全性。(通用)

  • noauto” 选项限制仅通过显式操作进行挂载。(通用)

  • ext3fs 的 “data=journal” 选项可以增强数据完整性以应对电源故障,但会损失一些写入速度。

[Tip] 提示

您需要提供内核启动参数(请参阅第 3.3 节,“第二阶段:引导加载程序”),例如 “rootflags=data=journal” 以便为根文件系统部署非默认的日志模式。 对于 lenny,默认的日志模式是 “rootflags=data=ordered”。 对于 squeeze,它是 “rootflags=data=writeback”。

9.3.7. 通过超级块优化文件系统

可以使用 tune2fs(8) 命令通过文件系统的超级块来优化文件系统的特性。

  • 执行 “sudo tune2fs -l /dev/hda1” 会显示 “/dev/hda1” 上文件系统超级块的内容。

  • 执行 “sudo tune2fs -c 50 /dev/hda1” 会将 “/dev/hda1” 上文件系统检查(启动期间执行 fsck)的频率更改为每 50 次启动一次。

  • 执行 “sudo tune2fs -j /dev/hda1” 会向文件系统添加日志功能,即在 “/dev/hda1” 上将文件系统从 ext2 转换为 ext3。(在未挂载的文件系统上执行此操作。)

  • 执行 “sudo tune2fs -O extents,uninit_bg,dir_index /dev/hda1 && fsck -pf /dev/hda1” 会在 “/dev/hda1” 上将其从 ext3 转换为 ext4。(在未挂载的文件系统上执行此操作。)

[Warning] 警告

GRUB 引导加载程序良好地支持 ext4 文件系统且已安装的 Linux 内核版本高于 2.6.30 之前,应避免将引导设备的文件系统转换为 ext4 文件系统。

[Tip] 提示

尽管名称如此,tune2fs(8) 不仅适用于 ext2 文件系统,也适用于 ext3ext4 文件系统。

9.3.8. 硬盘优化

[Warning] 警告

在操作硬盘配置之前,请检查您的硬件并阅读 hdparam(8) 的手册页,因为这可能对数据完整性非常危险。

您可以使用 “hdparm -tT /dev/hda” 测试硬盘(例如 “/dev/hda”)的磁盘访问速度。 对于某些通过 (E)IDE 连接的硬盘,您可以通过启用 “(E)IDE 32 位 I/O 支持”、启用 “using_dma 标志”、设置 “interrupt-unmask 标志” 和设置 “多扇区 16 I/O”(危险!)使用 “hdparm -q -c3 -d1 -u1 -m16 /dev/hda” 来加速它。

您可以使用 “hdparm -W /dev/sda” 测试硬盘(例如 “/dev/sda”)的写入缓存功能。 您可以使用 “hdparm -W 0 /dev/sda” 禁用其写入缓存功能。

您可能可以通过使用 “setcd -x 2” 降低现代高速 CD-ROM 驱动器的速度来读取压制不良的 CDROM。

9.3.9. 固态硬盘优化

可以按如下方式优化 固态硬盘 (SSD) 的性能和磁盘磨损。

  • 使用最新的 Linux 内核。(>= 3.2)

  • 减少用于读取磁盘访问的磁盘写入。

    • /etc/fstab 中设置 “noatime” 或 “relatime” 挂载选项。

  • 启用 TRIM 命令。

    • /etc/fstab 中为 ext4 文件系统、交换分区、Btrfs 等设置 “discard” 挂载选项。 请参阅 fstab(5)

    • LVM/etc/lvm/lvm.conf 中设置 “discard” 选项。 请参阅 lvm.conf(5)

    • dm-crypt/etc/crypttab 中设置 “discard” 选项。 请参阅 crypttab(5)

  • 启用 SSD 优化的磁盘空间分配方案。

    • /etc/fstab 中为 Btrfs 设置 “ssd” 挂载选项。

  • 使系统每 10 分钟将数据刷新到磁盘,用于笔记本电脑。

    • /etc/fstab 中设置 “commit=600” 挂载选项。 请参阅 fstab(5)

    • 设置 pm-utils 以即使在交流电源操作下也使用笔记本电脑模式。 请参阅 Debian BTS #659260

[Warning] 警告

将刷新间隔从正常的 5 秒更改为 10 分钟会使您的数据容易受到电源故障的影响。

9.3.10. 使用 SMART 预测硬盘故障

您可以使用 smartd(8) 守护程序监控和记录符合 SMART 的硬盘。

  1. BIOS 中启用 SMART 功能。

  2. 安装 smartmontools 软件包。

  3. 通过使用 df(1) 列出硬盘驱动器来识别它们。

    • 让我们假设要监控的硬盘驱动器为 “/dev/hda”。

  4. 检查 “smartctl -a /dev/hda” 的输出,以查看 SMART 功能是否实际已启用。

    • 如果未启用,则通过 “smartctl -s on -a /dev/hda” 启用它。

  5. 通过以下方式启用 smartd(8) 守护程序运行。

    • 取消注释 “/etc/default/smartmontools” 文件中的 “start_smartd=yes”。

    • 通过 “sudo /etc/init.d/smartmontools restart” 重启 smartd(8) 守护程序。

[Tip] 提示

可以使用 /etc/smartd.conf 文件自定义 smartd(8) 守护程序,包括如何通知警告。

9.3.11. 通过 LVM 扩展可用存储空间

对于在安装时在 逻辑卷管理器 (LVM)(Linux 功能)上创建的分区,可以通过在多个存储设备上将区段连接到它们或从中截断区段来轻松调整它们的大小,而无需进行重大的系统重新配置。

[Caution] 注意

除非通过禁用硬盘的写入缓存来牺牲系统性能,否则当前 LVM 系统的部署可能会降低诸如 ext3fs 之类的日志文件系统所提供的文件系统损坏保证。

9.3.12. 通过挂载另一个分区来扩展可用存储空间

如果您有一个空分区(例如,“/dev/sdx”),您可以使用 mkfs.ext3(1) 格式化它,并将其 mount(8) 到您需要更多空间的目录。(您需要复制原始数据内容。)

$ sudo mv work-dir old-dir
$ sudo mkfs.ext3 /dev/sdx
$ sudo mount -t ext3 /dev/sdx work-dir
$ sudo cp -a old-dir/* work-dir
$ sudo rm -rf old-dir
[Tip] 提示

您可以选择挂载一个空的磁盘映像文件(请参阅第 10.2.5 节,“制作空磁盘映像文件”)作为环回设备(请参阅第 10.2.3 节,“挂载磁盘映像文件”)。 实际的磁盘使用量随着实际存储的数据量而增长。

9.3.13. 通过绑定挂载另一个目录来扩展可用存储空间

如果您在另一个具有可用空间的分区上有一个空目录(例如,“/path/to/emp-dir”),您可以将其与 “--bind” 选项 mount(8) 到您需要更多空间的目录(例如,“work-dir”)。

$ sudo mount --bind /path/to/emp-dir work-dir

9.3.14. 使用符号链接扩展可用存储空间

[Tip] 提示

这是一种已弃用的方法。 如果可能,请改用第 9.3.13 节,“通过绑定挂载另一个目录来扩展可用存储空间”

如果您在另一个具有可用空间的分区中有一个空目录(例如,“/path/to/emp-dir”),您可以使用 ln(8) 创建指向该目录的符号链接。

$ sudo mv work-dir old-dir
$ sudo mkdir -p /path/to/emp-dir
$ sudo ln -sf /path/to/emp-dir work-dir
$ sudo cp -a old-dir/* work-dir
$ sudo rm -rf old-dir
[Warning] 警告

不要对系统管理的目录(例如 “/opt”)使用 “指向目录的符号链接”。 当系统升级时,这样的符号链接可能会被覆盖。

[Caution] 注意

某些软件可能无法很好地与 “指向目录的符号链接” 一起运行。

9.3.15. 使用 aufs 扩展可用存储空间

如果您在另一个分区(例如,“/path/to/”)中有可用空间,您可以在其中创建一个目录,并使用 aufs 将其堆叠到您需要空间的目录上。

$ sudo mv work-dir old-dir
$ sudo mkdir work-dir
$ sudo mkdir -p /path/to/emp-dir
$ sudo mount -t aufs -o br:/path/to/emp-dir:old-dir none work-dir
[Caution] 注意

长期数据存储不宜使用 aufs,因为它仍在开发中,并且其设计更改可能会引入问题。

[Tip] 提示

为了使用 aufs,需要安装其实用程序包 aufs-toolsaufs 的内核模块包,例如 aufs-modules-2.6-amd64

[Tip] 提示

aufs 被许多现代 Live CD 项目用于提供可写根文件系统。

9.4. 数据加密提示

通过物理访问您的 PC,任何人都可以轻松获得 root 权限并访问您 PC 上的所有文件(请参阅第 4.7.4 节,“保护 root 密码”)。 这意味着登录密码系统无法保护您的私人和敏感数据免受可能的 PC 盗窃。 您必须部署数据加密技术来做到这一点。 虽然 GNU 隐私卫士(请参阅第 10.4 节,“数据安全基础设施”)可以加密文件,但这需要用户付出一定的努力。

dm-crypteCryptfs 通过 Linux 内核模块以最少的用户努力促进本地自动数据加密。

表 9.9. 数据加密实用程序列表

软件包 popcon 大小 描述
cryptsetup http://qa.debian.org/popcon.php?package=cryptsetup 648 加密块设备 (dm-crypt / LUKS) 的实用程序
cryptmount http://qa.debian.org/popcon.php?package=cryptmount 341 加密块设备 (dm-crypt / LUKS) 的实用程序,侧重于普通用户的挂载/卸载
ecryptfs-utils http://qa.debian.org/popcon.php?package=ecryptfs-utils 368 加密堆叠文件系统 (eCryptfs) 的实用程序

Dm-crypt 是使用 device-mapper 的加密文件系统。 Device-mapper 将一个块设备映射到另一个块设备。

eCryptfs 是另一个使用堆叠文件系统的加密文件系统。 堆叠文件系统将其自身堆叠在已挂载文件系统的现有目录之上。

[Caution] 注意

数据加密会消耗 CPU 时间等。 请权衡其好处和成本。

[Note] 注意

整个 Debian 系统可以通过 debian-installer(lenny 或更高版本)使用 dm-crypt/LUKS 和 initramfs 安装在加密磁盘上。

[Tip] 提示

有关用户空间加密实用程序的信息,请参阅第 10.4 节,“数据安全基础设施”GNU 隐私卫士

9.4.1. 使用 dm-crypt/LUKS 进行可移动磁盘加密

您可以使用 dm-crypt/LUKS 加密可移动大容量存储设备(例如 “/dev/sdx” 上的 USB 记忆棒)的内容。 您只需按如下方式格式化它。

# badblocks -c 1024 -s -w -t random -v /dev/sdx
# fdisk /dev/sdx
... "n" "p" "1" "return" "return" "w"
# cryptsetup luksFormat /dev/sdx1
...
# cryptsetup luksOpen /dev/sdx1 sdx1
...
# ls -l /dev/mapper/
total 0
crw-rw---- 1 root root  10, 60 2008-10-04 18:44 control
brw-rw---- 1 root disk 254,  0 2008-10-04 23:55 sdx1
# mkfs.vfat /dev/mapper/sdx1
...
# cryptsetup luksClose sdx1

然后,它可以像普通设备一样挂载到 “/media/<disk_label>”,除了在现代桌面环境(例如使用 gnome-mount(1) 的 GNOME)下要求输入密码(请参阅第 10.1.10 节,“可移动存储设备”)。 区别在于写入它的每个数据都会被加密。 您也可以选择使用不同的文件格式格式化介质,例如,使用 “mkfs.ext3 /dev/sdx1” 的 ext3。

[Note] 注意

如果您真的对数据安全性感到偏执,您可能需要在上面的示例中多次覆盖。 尽管此操作非常耗时。

9.4.2. 使用 dm-crypt 加密交换分区

让我们假设您的原始 “/etc/fstab” 包含以下内容。

/dev/sda7 swap sw 0 0

您可以通过如下方式使用 dm-crypt 启用加密交换分区。

# aptitude install cryptsetup
# swapoff -a
# echo "cswap /dev/sda7 /dev/urandom swap" >> /etc/crypttab
# perl -i -p -e "s/\/dev\/sda7/\/dev\/mapper\/cswap/" /etc/fstab
# /etc/init.d/cryptdisks restart
 ...
# swapon -a

9.4.3. 使用 eCryptfs 自动加密文件

您可以使用 eCryptfsecryptfs-utils 软件包自动加密写入 “~/Private/” 下的文件。

  • 运行 ecryptfs-setup-private(1) 并按照提示设置 “~/Private/”。

  • 通过运行 ecryptfs-mount-private(1) 激活 “~/Private/”。

  • 将敏感数据文件移动到 “~/Private/” 并根据需要创建符号链接。

    • 候选文件:“~/.fetchmailrc”、“~/.ssh/identity”、“~/.ssh/id_rsa”、“~/.ssh/id_dsa” 和其他具有 “go-rwx” 权限的文件

  • 将敏感数据目录移动到 “~/Private/” 中的子目录,并根据需要创建符号链接。

    • 候选目录:“~/.gnupg” 和其他具有 “go-rwx” 权限的目录

  • 从 “~/Desktop/Private/” 创建到 “~/Private/” 的符号链接,以便于桌面操作。

  • 通过运行 ecryptfs-umount-private(1) 停用 “~/Private/”。

  • 在您需要加密数据时,通过发出 “ecryptfs-mount-private” 激活 “~/Private/”。

[Tip] 提示

由于 eCryptfs 选择性地仅加密敏感文件,因此其系统成本远低于在整个根目录或 “/home” 设备上使用 dm-crypt。 它不需要任何特殊的磁盘存储分配工作,但无法保持所有文件系统元数据的机密性。

9.4.4. 自动挂载 eCryptfs

如果您使用您的登录密码来包装加密密钥,您可以通过 PAM(可插拔身份验证模块) 自动化挂载 eCryptfs。

在 “/etc/pam.d/common-auth” 中的 “pam_permit.so” 之前插入以下行。

auth required pam_ecryptfs.so unwrap

在 “/etc/pam.d/common-session” 中的最后一行插入以下行。

session optional pam_ecryptfs.so unwrap

在 “/etc/pam.d/common-password” 中的第一个活动行插入以下行。

password required pam_ecryptfs.so

这非常方便。

[Warning] 警告

PAM 的配置错误可能会使您无法访问自己的系统。 请参阅第 4 章,身份验证

[Caution] 注意

如果您使用您的登录密码来包装加密密钥,则您的加密数据与您的用户登录密码一样安全(请参阅第 4.3 节,“好的密码”)。 除非您小心设置 强密码,否则当有人在偷走您的笔记本电脑后运行 密码破解 软件时,您的数据将面临风险(请参阅第 4.7.4 节,“保护 root 密码”)。

9.5. 监控、控制和启动程序活动

可以使用专用工具监控和控制程序活动。

表 9.10. 用于监控和控制程序活动的工具列表

软件包 popcon 大小 描述
coreutils http://qa.debian.org/popcon.php?package=coreutils 14088 nice(1):以修改后的调度优先级运行程序
bsdutils http://qa.debian.org/popcon.php?package=bsdutils 187 renice(1):修改正在运行的进程的调度优先级
procps http://qa.debian.org/popcon.php?package=procps 593 /proc” 文件系统实用程序:ps(1)top(1)kill(1)watch(1)、…
psmisc http://qa.debian.org/popcon.php?package=psmisc 602 /proc” 文件系统实用程序:killall(1)fuser(1)peekfd(1)pstree(1)
time http://qa.debian.org/popcon.php?package=time 152 time(1):运行程序以报告关于时间的系统资源使用情况
sysstat http://qa.debian.org/popcon.php?package=sysstat 962 sar(1)iostat(1)mpstat(1)、…:Linux 系统性能工具
isag http://qa.debian.org/popcon.php?package=isag 126 用于 sysstat 的交互式系统活动图形器
lsof http://qa.debian.org/popcon.php?package=lsof 420 lsof(8):使用 “-p” 选项列出正在运行的进程打开的文件
strace http://qa.debian.org/popcon.php?package=strace 404 strace(1):跟踪系统调用和信号
ltrace http://qa.debian.org/popcon.php?package=ltrace 188 ltrace(1):跟踪库调用
xtrace http://qa.debian.org/popcon.php?package=xtrace 336 xtrace(1):跟踪 X11 客户端和服务器之间的通信
powertop http://qa.debian.org/popcon.php?package=powertop 380 powertop(1):关于基于 Intel 的笔记本电脑的系统功耗信息
cron http://qa.debian.org/popcon.php?package=cron 195 cron(8) 守护程序在后台根据计划运行进程
anacron http://qa.debian.org/popcon.php?package=anacron 159 用于非 24 小时运行的系统的类似 cron 的命令调度程序
at http://qa.debian.org/popcon.php?package=at 140 at(1)batch(1):在指定时间或低于特定负载级别时运行作业

[Tip] 提示

procps 软件包提供了监控、控制和启动程序活动的基本知识。 您应该学习所有这些。

9.5.1. 计时进程

显示命令调用的进程所用的时间。

# time some_command >/dev/null
real    0m0.035s       # time on wall clock (elapsed real time)
user    0m0.000s       # time in user mode
sys     0m0.020s       # time in kernel mode

9.5.2. 调度优先级

nice 值用于控制进程的调度优先级。

表 9.11. 调度优先级的 nice 值列表

nice 值 调度优先级
19 最低优先级进程 (nice)
0 用户的非常高优先级进程
-20 root 用户的非常高优先级进程 (not-nice)

# nice  -19 top                                      # very nice
# nice --20 wodim -v -eject speed=2 dev=0,0 disk.img # very fast

有时,极端的 nice 值对系统的危害大于好处。 请谨慎使用此命令。

9.5.3. ps 命令

Debian 上的 ps(1) 命令同时支持 BSD 和 SystemV 功能,并有助于静态识别进程活动。

表 9.12. ps 命令样式列表

样式 典型命令 功能
BSD ps aux 显示 %CPU %MEM
System V ps -efH 显示 PPID

对于僵尸(defunct)子进程,您可以使用 “PPID” 字段中标识的父进程 ID 杀死它们。

pstree(1) 命令显示进程树。

9.5.4. top 命令

Debian 上的 top(1) 具有丰富的功能,有助于动态识别哪些进程行为异常。

表 9.13. top 命令列表

命令键 响应描述
h? 显示帮助
f 设置/重置显示字段
o 重新排序显示字段
F 设置排序键字段
k 杀死进程
r 重新调整进程的 nice 值
q 退出 top 命令

9.5.5. 列出进程打开的文件

您可以使用以下命令列出进程 ID (PID) 为 1 的进程打开的所有文件,例如。

$ sudo lsof -p 1

PID=1 通常是 init 程序。

9.5.6. 跟踪程序活动

您可以使用 strace(1)ltrace(1)xtrace(1) 跟踪程序活动,分别用于系统调用和信号、库调用或 X11 客户端和服务器之间的通信。

您可以按如下方式跟踪 ls 命令的系统调用。

$ sudo strace ls

9.5.7. 识别使用文件或套接字的进程

您还可以使用 fuser(1) 识别使用文件的进程,例如,对于 “/var/log/mail.log”,使用以下命令。

$ sudo fuser -v /var/log/mail.log
                     USER        PID ACCESS COMMAND
/var/log/mail.log:   root       2946 F.... rsyslogd

您会看到文件 “/var/log/mail.log” 已被 rsyslogd(8) 命令打开以进行写入。

您还可以使用 fuser(1) 识别使用套接字的进程,例如,对于 “smtp/tcp”,使用以下命令。

$ sudo fuser -v smtp/tcp
                     USER        PID ACCESS COMMAND
smtp/tcp:            Debian-exim   3379 F.... exim4

现在您知道您的系统正在运行 exim4(8) 以处理到 SMTP 端口 (25) 的 TCP 连接。

9.5.8. 以恒定间隔重复命令

watch(1) 以恒定间隔重复执行程序,同时以全屏显示其输出。

$ watch w

这将显示每 2 秒更新一次的已登录系统的用户。

9.5.9. 重复命令循环处理文件

有几种方法可以重复命令循环处理符合某些条件的文件,例如匹配 glob 模式 “*.ext”。

for x in *.ext; do if [ -f "$x"]; then command "$x" ; fi; done
  • find(1)xargs(1) 组合

find . -type f -maxdepth 1 -name '*.ext' -print0 | xargs -0 -n 1 command
  • find(1) 与 “-exec” 选项和命令

find . -type f -maxdepth 1 -name '*.ext' -exec command '{}' \;
  • find(1) 与 “-exec” 选项和简短的 shell 脚本

find . -type f -maxdepth 1 -name '*.ext' -exec sh -c "command '{}' && echo 'successful'" \;

上述示例旨在确保正确处理奇怪的文件名,例如包含空格的文件名。 有关 find(1) 的更高级用法,请参阅第 10.1.5 节,“文件选择的惯用法”

9.5.10. 从 GUI 启动程序

您可以设置从 图形用户界面 (GUI) 启动进程。

在 GNOME 桌面环境下,可以通过双击启动器图标、将文件图标拖放到启动器图标,或通过右键单击文件图标使用 “打开方式…” 菜单来启动带有正确参数的程序。 KDE 也可以做到同样的事情。

以下是在 GNOME 下创建一个启动器图标的示例,用于在 gnome-terminal(1) 中启动的 mc(1)

通过以下方式创建一个可执行程序 “mc-term”。

# cat >/usr/local/bin/mc-term <<EOF
#!/bin/sh
gnome-terminal -e "mc \$1"
EOF
# chmod 755 /usr/local/bin/mc-term

创建桌面启动器,如下所示。

  1. 右键单击桌面空间以选择 “创建启动器…”。

  2. 将 “类型” 设置为 “应用程序”。

  3. 将 “名称” 设置为 “mc”。

  4. 将 “命令” 设置为 “mc-term %f”。

  5. 单击 “确定”。

创建打开方式关联,如下所示。

  1. 右键单击文件夹以选择 “打开方式…”。

  2. 单击打开“使用自定义命令”对话框,然后输入“mc-term %f”。

  3. 单击“打开”。

[Tip] 提示

启动器是“~/Desktop”中的一个文件,扩展名为“.desktop”。

9.5.11. 自定义要启动的程序

有些程序会自动启动另一个程序。以下是自定义此过程的检查点。

  • 应用程序配置菜单

    • GNOME 桌面:“系统” → “首选项” → “首选应用程序”

    • KDE 桌面:“K” → “控制中心” → “KDE 组件” → “组件选择器”

    • Iceweasle 浏览器:“编辑” → “首选项” → “应用程序”

    • mc(1):“/etc/mc/mc.ext

  • 环境变量,例如“$BROWSER”、“$EDITOR”、“$VISUAL”和“$PAGER”(请参阅 eviron(7)

  • 用于程序(如“editor”、“view”、“x-www-browser”、“gnome-www-browser”和“www-browser”)的 update-alternatives(8) 系统(请参阅 第 1.4.7 节“设置默认文本编辑器”

  • ~/.mailcap”和“/etc/mailcap”文件内容,它们将 MIME 类型与程序关联(请参阅 mailcap(5)

  • ~/.mime.types”和“/etc/mime.types”文件内容,它们将文件名扩展名与 MIME 类型关联(请参阅 run-mailcap(1)

[Tip] 提示

update-mime(8) 使用“/etc/mailcap.order”文件更新“/etc/mailcap”文件(请参阅 mailcap.order(5))。

[Tip] 提示

debianutils 软件包提供了 sensible-browser(1)sensible-editor(1)sensible-pager(1),它们分别对调用哪个编辑器、分页器和 Web 浏览器做出合理的决定。我建议您阅读这些 shell 脚本。

[Tip] 提示

为了在 X 下以首选应用程序身份运行控制台应用程序(如 mutt),您应该创建一个 X 应用程序,如下所示,并将“/usr/local/bin/mutt-term”设置为要启动的首选应用程序,如所述。

# cat /usr/local/bin/mutt-term <<EOF
#!/bin/sh
gnome-terminal -e "mutt \$@"
EOF
chmod 755 /usr/local/bin/mutt-term

9.5.12. 杀死进程

使用 kill(1) 通过进程 ID 杀死(或向其发送信号)进程。

使用 killall(1)pkill(1) 通过进程命令名称和其他属性执行相同的操作。

表 9.14. kill 命令常用的信号列表

信号值 信号名称 功能
1 HUP 重启守护进程
15 TERM 正常杀死
9 KILL 强制杀死

9.5.13. 一次性调度任务

运行 at(1) 命令以按以下方式调度一次性作业。

$ echo 'command -args'| at 3:40 monday

9.5.14. 定期调度任务

使用 cron(8) 定期调度任务。请参阅 crontab(1)crontab(5)

您可以计划以普通用户身份运行进程,例如 foo,方法是使用“crontab -e”命令创建 crontab(5) 文件,如“/var/spool/cron/crontabs/foo”。

以下是一个 crontab(5) 文件的示例。

# use /bin/sh to run commands, no matter what /etc/passwd says
SHELL=/bin/sh
# mail any output to paul, no matter whose crontab this is
MAILTO=paul
# Min Hour DayOfMonth Month DayOfWeek command (Day... are OR'ed)
# run at 00:05, every day
5  0  *  * *   $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
# run at 14:15 on the first of every month -- output mailed to paul
15 14 1  * *   $HOME/bin/monthly
# run at 22:00 on weekdays(1-5), annoy Joe. % for newline, last % for cc:
0 22 *   * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%.%%
23 */2 1 2 *   echo "run 23 minutes after 0am, 2am, 4am ..., on Feb 1"
5  4 *   * sun echo "run at 04:05 every Sunday"
# run at 03:40 on the first Monday of each month
40 3 1-7 * *   [ "$(date +%a)" == "Mon" ] && command -args
[Tip] 提示

对于未持续运行的系统,请安装 anacron 软件包,以在指定的间隔定期调度命令,并尽可能接近机器正常运行时间。请参阅 anacron(8)anacrontab(5)

[Tip] 提示

对于计划的系统维护脚本,您可以从 root 帐户定期运行它们,方法是将此类脚本放在“/etc/cron.hourly/”、“/etc/cron.daily/”、“/etc/cron.weekly/”或“/etc/cron.monthly/”中。这些脚本的执行时间可以通过“/etc/crontab”和“/etc/anacrontab”进行自定义。

9.5.15. Alt-SysRq 键

内核编译选项“Magic SysRq key”(SAK 键)提供了针对系统故障的保险,现在它是 Debian 内核的默认设置。按下 Alt-SysRq,然后按以下键之一,即可神奇地恢复对系统的控制。

表 9.15. SAK 命令键列表

Alt-SysRq 之后的键 操作说明
r 在 X 崩溃后从raw 模式恢复键盘
0 将控制台日志级别更改为 0 以减少错误消息
k k杀死当前虚拟控制台上的所有进程
e 向所有进程发送 SIGTERM,init(8) 除外
i 向所有进程发送 SIGKILL,init(8) 除外
s s同步所有已挂载的文件系统
u 以只读方式重新挂载所有已挂载的文件系统(unmount)
b 在不同步或卸载的情况下重boot 系统

“Alt-SysRq s”、“Alt-SysRq u”和“Alt-SysRq r”的组合非常适合摆脱非常糟糕的情况。

请参阅“/usr/share/doc/linux-doc-2.6.*/Documentation/sysrq.txt.gz”。

[Caution] 注意

Alt-SysRq 功能可能会被视为安全风险,因为它允许用户访问 root 特权功能。在“/etc/rc.local”中放置“echo 0 >/proc/sys/kernel/sysrq”或在“/etc/sysctl.conf”中放置“kernel.sysrq = 0”会禁用 Alt-SysRq 功能。

[Tip] 提示

从 SSH 终端等,您可以通过写入“/proc/sysrq-trigger”来使用 Alt-SysRq 功能。例如,从 root shell 提示符执行“echo s > /proc/sysrq-trigger; echo u > /proc/sysrq-trigger”会s同步和 unmount 所有已挂载的文件系统。

9.6. 系统维护技巧

9.6.1. 谁在使用系统?

您可以通过以下方式检查谁在使用系统。

  • who(1) 显示谁已登录。

  • w(1) 显示谁已登录以及他们正在做什么。

  • last(1) 显示上次登录用户的列表。

  • lastb(1) 显示上次错误登录用户的列表。

[Tip] 提示

/var/run/utmp”、“/var/log/wtmp”和“/var/run/utmp”保存此类用户信息。请参阅 login(1)utmp(5)

9.6.2. 警告所有人

您可以使用 wall(1) 向所有已登录系统的用户发送消息,方法如下。

$ echo "We are shutting down in 1 hour" | wall

9.6.3. 硬件识别

对于类似 PCI 的设备(AGPPCI-ExpressCardBusExpressCard 等),lspci(8)(可能带有“-nn”选项)是硬件识别的一个好的开始

或者,您可以通过读取“/proc/bus/pci/devices”的内容或浏览“/sys/bus/pci”下的目录树来识别硬件(请参阅 第 1.2.12 节“procfs 和 sysfs”)。

表 9.16. 硬件识别工具列表

软件包 popcon 大小 描述
pciutils http://qa.debian.org/popcon.php?package=pciutils 921 Linux PCI 实用程序:lspci(8)
usbutils http://qa.debian.org/popcon.php?package=usbutils 630 Linux USB 实用程序:lsusb(8)
pcmciautils http://qa.debian.org/popcon.php?package=pcmciautils 115 Linux 2.6 的 PCMCIA 实用程序:pccardctl(8)
scsitools http://qa.debian.org/popcon.php?package=scsitools 316 SCSI 硬件管理工具集合:lsscsi(8)
pnputils http://qa.debian.org/popcon.php?package=pnputils 108 即插即用 BIOS 实用程序:lspnp(8)
procinfo http://qa.debian.org/popcon.php?package=procinfo 164 从“/proc”获取的系统信息:lsdev(8)
lshw http://qa.debian.org/popcon.php?package=lshw 712 有关硬件配置的信息:lshw(1)
discover http://qa.debian.org/popcon.php?package=discover 66 硬件识别系统:discover(8)

9.6.4. 硬件配置

尽管现代 GUI 桌面系统(如 GNOME 和 KDE)上的大多数硬件配置都可以通过随附的 GUI 配置工具进行管理,但了解一些配置它们的基本方法是个好主意。

表 9.17. 硬件配置工具列表

软件包 popcon 大小 描述
hal http://qa.debian.org/popcon.php?package=hal 1495 硬件抽象层:lshal(1)
console-tools http://qa.debian.org/popcon.php?package=console-tools 956 Linux 控制台字体和键盘表实用程序
x11-xserver-utils http://qa.debian.org/popcon.php?package=x11-xserver-utils 485 X 服务器实用程序:xset(1)xmodmap(1)
acpid http://qa.debian.org/popcon.php?package=acpid 187 用于管理由高级配置和电源接口 (ACPI) 传递的事件的守护程序
acpi http://qa.debian.org/popcon.php?package=acpi 70 用于显示有关 ACPI 设备信息的实用程序
apmd http://qa.debian.org/popcon.php?package=apmd 252 用于管理由高级电源管理 (APM) 传递的事件的守护程序
noflushd http://qa.debian.org/popcon.php?package=noflushd 248 允许空闲硬盘驱动器停止旋转的守护程序
sleepd http://qa.debian.org/popcon.php?package=sleepd 148 在不活动期间使笔记本电脑进入睡眠状态的守护程序
hdparm http://qa.debian.org/popcon.php?package=hdparm 284 硬盘驱动器访问优化(请参阅 第 9.3.8 节“硬盘驱动器优化”
smartmontools http://qa.debian.org/popcon.php?package=smartmontools 1149 使用 S.M.A.R.T. 控制和监视存储系统
setserial http://qa.debian.org/popcon.php?package=setserial 147 串行端口管理工具集合
memtest86+ http://qa.debian.org/popcon.php?package=memtest86+ 2342 内存硬件管理工具集合
scsitools http://qa.debian.org/popcon.php?package=scsitools 316 用于 SCSI 硬件管理的工具集合
tpconfig http://qa.debian.org/popcon.php?package=tpconfig 164 用于配置触摸板设备的实用程序
setcd http://qa.debian.org/popcon.php?package=setcd 28 光盘驱动器访问优化
big-cursor http://qa.debian.org/popcon.php?package=big-cursor 68 用于 X 的更大的鼠标光标

在这里,ACPI 是比 APM 更新的电源管理系统框架。

[Tip] 提示

现代系统上的 CPU 频率缩放由内核模块(如 acpi_cpufreq)控制。

9.6.5. 系统和硬件时间

以下命令将系统和硬件时间设置为 MM/DD hh:mm, CCYY。

# date MMDDhhmmCCYY
# hwclock --utc --systohc
# hwclock --show

时间通常以 Debian 系统上的本地时间显示,但硬件和系统时间通常使用 UT(GMT)

如果硬件 (BIOS) 时间设置为 UT,请将“/etc/default/rcS”中的设置更改为“UTC=yes”。

如果您希望通过网络更新系统时间,请考虑使用 NTP 服务,软件包如 ntpntpdatechrony

请参阅以下内容。

[Tip] 提示

ntp 软件包中的 ntptrace(8) 可以跟踪 NTP 服务器链回到主源。

9.6.6. 终端配置

有几个组件可以配置字符控制台和 ncurses(3) 系统功能。

  • /etc/terminfo/*/*”文件 (terminfo(5))

  • $TERM”环境变量 (term(7))

  • setterm(1)stty(1)tic(1)toe(1)

如果 xtermterminfo 条目不适用于非 Debian xterm,请在远程登录到 Debian 系统时,将终端类型“$TERM”从“xterm”更改为功能受限的版本之一,例如“xterm-r6”。有关更多信息,请参阅“/usr/share/doc/libncurses5/FAQ”。“dumb”是“$TERM”的最低公分母。

9.6.7. 声音基础设施

当前 Linux 2.6 的声卡的设备驱动程序由 高级 Linux 声音体系结构 (ALSA) 提供。ALSA 为以前的 开放声音系统 (OSS) 提供仿真模式,以实现兼容性。

运行“dpkg-reconfigure linux-sound-base”以通过列入内核模块黑名单来选择要使用的声音系统 ALSA。除非您有非常新的声音硬件,否则 udev 基础结构应该配置您的声音系统。

[Tip] 提示

使用“cat /dev/urandom > /dev/audio”或 speaker-test(1) 测试扬声器。(^C 停止)

[Tip] 提示

如果您无法获得声音,则可能是您的扬声器已连接到静音输出。现代声音系统有许多输出。alsa-utils 软件包中的 alsamixer(1) 可用于配置音量和静音设置。

应用程序软件不仅可以配置为直接访问声音设备,还可以配置为通过某些标准化的声音服务器系统访问它们。


通常,每个流行的桌面环境都有一个通用的声音引擎。应用程序使用的每个声音引擎都可以选择连接到不同的声音服务器。

9.6.8. 禁用屏幕保护程序

要禁用屏幕保护程序,请使用以下命令。

表 9.19. 用于禁用屏幕保护程序的命令列表

环境 命令
Linux 控制台 setterm -powersave off
X Window(关闭屏幕保护程序) xset s off
X Window(禁用 dpms) xset -dpms
X Window(屏幕保护程序的 GUI 配置) xscreensaver-command -prefs

9.6.9. 禁用嘟嘟声

可以随时拔下 PC 扬声器以禁用嘟嘟声。删除 pcspkr 内核模块可以为您执行此操作。

以下命令可防止 readline(3) 程序(由 bash(1) 使用)在遇到“\a”(ASCII=7)时发出嘟嘟声。

$ echo "set bell-style none">> ~/.inputrc

9.6.10. 内存使用情况

/var/log/dmesg”中的内核启动消息包含可用内存的总确切大小。

free(1)top(1) 显示有关正在运行的系统上的内存资源的信息。

# grep '\] Memory' /var/log/dmesg
[    0.004000] Memory: 990528k/1016784k available (1975k kernel code, 25868k reserved, 931k data, 296k init)
$ free -k
             total       used       free     shared    buffers     cached
Mem:        997184     976928      20256          0     129592     171932
-/+ buffers/cache:     675404     321780
Swap:      4545576          4    4545572
[Tip] 提示

不要担心“Mem:”行中“used”的大小过大和“free”的大小过小,但请阅读它们下面的那一行(在下面的示例中为 675404 和 321780)并放松。

对于我的 MacBook,配备 1GB=1048576k DRAM(视频系统占用其中一部分),我看到以下内容。

表 9.20. 报告的内存大小列表

报告 大小
dmesg 中的总大小 1016784k = 1GB - 31792k
dmesg 中的可用空间 990528k
shell 下的总大小 997184k
shell 下的可用空间 20256k(但实际上为 321780k)

9.6.11. 系统安全性和完整性检查

系统维护不善可能会使您的系统容易受到外部利用。

对于系统安全性和完整性检查,您应该从以下内容开始。

表 9.21. 用于系统安全性和完整性检查的工具列表

软件包 popcon 大小 描述
logcheck http://qa.debian.org/popcon.php?package=logcheck 284 用于通过邮件将系统日志文件中的异常发送给管理员的守护程序
debsums http://qa.debian.org/popcon.php?package=debsums 224 用于根据 MD5 校验和验证已安装的软件包文件的实用程序
chkrootkit http://qa.debian.org/popcon.php?package=chkrootkit 920 rootkit 检测器
clamav http://qa.debian.org/popcon.php?package=clamav 584 Unix 的防病毒实用程序 - 命令行界面
tiger http://qa.debian.org/popcon.php?package=tiger 2374 报告系统安全漏洞
tripwire http://qa.debian.org/popcon.php?package=tripwire 9029 文件和目录完整性检查器
john http://qa.debian.org/popcon.php?package=john 472 主动密码破解工具
aide http://qa.debian.org/popcon.php?package=aide 1320 高级入侵检测环境 - 静态二进制文件
bastille http://qa.debian.org/popcon.php?package=bastille 1960 安全加固工具
integrit http://qa.debian.org/popcon.php?package=integrit 440 文件完整性验证程序
crack http://qa.debian.org/popcon.php?package=crack 160 密码猜测程序

这是一个简单的脚本,用于检查典型的全局可写不正确的文件权限。

# find / -perm 777 -a \! -type s -a \! -type l -a \! \( -type d -a -perm 1777 \)
[Caution] 注意

由于 debsums 软件包使用本地存储的 MD5 校验和,因此它不能完全被信任为针对恶意攻击的系统安全审计工具。

9.7. 内核

Debian 以软件包的形式分发模块化的 Linux 内核,用于受支持的架构。

9.7.1. Linux 内核 2.6

与 2.4 相比,Linux 内核 2.6 有一些值得注意的功能。

  • 设备由 udev 系统创建(请参阅 第 3.5.11 节“udev 系统”)。

  • 对 IDE CD/DVD 设备的读/写访问不使用 ide-scsi 模块。

  • 网络数据包过滤功能使用 iptable 内核模块。

9.7.2. 内核参数

许多 Linux 功能可以通过内核参数进行配置,如下所示。

请参阅 Linux 内核文档中的“kernel-parameters.txt(.gz)”和其他相关文档(由 linux-doc-2.6.* 软件包提供的“/usr/share/doc/linux-doc-2.6.*/Documentation/filesystems/*”)。

9.7.3. 内核头文件

大多数普通程序不需要内核头文件,实际上,如果您直接使用它们进行编译,可能会中断。它们应该针对 Debian 系统上的 libc6-dev 软件包(从 glibc 源代码软件包创建)提供的“/usr/include/linux”和“/usr/include/asm”中的头文件进行编译。

[Note] 注意

对于编译某些内核特定的程序,例如来自外部源的内核模块和自动挂载程序守护程序 (amd),您必须在命令行中包含相应内核头文件的路径,例如“-I/usr/src/linux-particular-version/include/”。module-assistant(8)(或其简写形式 m-a)帮助用户轻松地为一个或多个自定义内核构建和安装模块软件包。

9.7.4. 编译内核和相关模块

Debian 有其自己编译内核和相关模块的方法。

表 9.22. 要在 Debian 系统上重新编译内核而安装的关键软件包列表

软件包 popcon 大小 描述
build-essential http://qa.debian.org/popcon.php?package=build-essential 48 用于构建 Debian 软件包的基本软件包:makegcc、…
bzip2 http://qa.debian.org/popcon.php?package=bzip2 86 用于 bz2 文件的压缩和解压缩实用程序
libncurses5-dev http://qa.debian.org/popcon.php?package=libncurses5-dev 1007 ncurses 的开发人员库和文档
git http://qa.debian.org/popcon.php?package=git 13073 git:Linux 内核使用的分布式版本控制系统
fakeroot http://qa.debian.org/popcon.php?package=fakeroot 316 为以非 root 用户身份构建软件包提供 fakeroot 环境
initramfs-tools http://qa.debian.org/popcon.php?package=initramfs-tools 321 用于构建 initramfs 的工具(Debian 特有)
dkms http://qa.debian.org/popcon.php?package=dkms 338 动态内核模块支持 (DKMS)(通用)
devscripts http://qa.debian.org/popcon.php?package=devscripts 1506 Debian 软件包维护者的辅助脚本(Debian 特有)

如果您在 第 3.3 节“阶段 2:引导加载程序”中使用 initrd,请确保阅读 initramfs-tools(8)update-initramfs(8)mkinitramfs(8)initramfs.conf(5) 中的相关信息。

[Warning] 警告

编译 Linux 内核源代码时,不要将符号链接从“/usr/include/linux”和“/usr/include/asm”放到源代码树(例如“/usr/src/linux*”)中的目录。(一些过时的文档建议这样做。)

[Note] 注意

在 Debian stable 系统上编译最新的 Linux 内核时,可能需要使用从 Debian unstable 反向移植的最新工具。

[Note] 注意

动态内核模块支持 (DKMS) 是一种新的、独立于发行版的框架,旨在允许在不更改整个内核的情况下升级各个内核模块。这将为 squeeze 的树外模块的维护提供支持。这也使得在升级内核时非常容易重建模块。

9.7.5. 编译内核源代码:Debian 内核团队建议

要从上游内核源代码构建自定义内核二进制软件包,您应该使用它提供的“deb-pkg”目标。

$ sudo apt-get build-dep linux-2.6
$ cd /usr/src
$ wget https://linuxkernel.org.cn/pub/linux/kernel/v3.2/linux-<version>.tar.bz2
$ tar -xjvf linux-<version>.tar.bz2
$ cd linux-<version>
$ cp /boot/config-<version> .config
$ make menuconfig
 ...
$ make deb-pkg
[Tip] 提示

linux-source-<version> 软件包以“/usr/src/linux-<version>.tar.bz2”的形式提供带有 Debian 补丁的 Linux 内核源代码。

要从 Debian 内核源代码软件包构建特定的二进制软件包,您应该使用“debian/rules.gen”中的“binary-arch_<architecture><featureset><flavour>”目标。

$ sudo apt-get build-dep linux-2.6
$ apt-get source linux-2.6
$ cd linux-2.6-*
$ fakeroot make -f debian/rules.gen binary-arch_i386_none_686

请参阅更多信息

9.7.6. 非自由硬件驱动程序

尽管大多数硬件驱动程序都以自由软件的形式提供,并且是 Debian 系统的一部分,但您可能需要加载一些非自由的外部驱动程序来支持系统上的一些硬件,例如 Winmodem。

[Tip] 提示

在启用非自由存储库的同时,使用“aptitude search ^firmware”检查可用的固件软件包。

[Tip] 提示

NDISwrapper 可以在 Linux 上本地使用 Windows XP 网络驱动程序。检查“aptitude search ^ndis”。

检查相关资源。

9.8. 虚拟化系统

使用虚拟化系统使我们能够在单个硬件上同时运行系统的多个实例。

9.8.1. 虚拟化工具

Debian 中除了简单的 chroot 之外,还有几个与系统虚拟化模拟相关的软件包。有些软件包还可以帮助您设置这样的系统。

表 9.23. 虚拟化工具列表

软件包 popcon 大小 描述
schroot http://qa.debian.org/popcon.php?package=schroot 2293 在 chroot 环境中执行 Debian 二进制软件包的专用工具
sbuild http://qa.debian.org/popcon.php?package=sbuild 465 用于从 Debian 源代码构建 Debian 二进制软件包的工具
pbuilder http://qa.debian.org/popcon.php?package=pbuilder 992 Debian 软件包的个人软件包构建器
debootstrap http://qa.debian.org/popcon.php?package=debootstrap 225 引导一个基本的 Debian 系统 (使用 sh 编写)
cdebootstrap http://qa.debian.org/popcon.php?package=cdebootstrap 71 引导一个 Debian 系统 (使用 C 编写)
rootstrap http://qa.debian.org/popcon.php?package=rootstrap 97 用于构建完整的 Linux 文件系统镜像的工具
virt-manager http://qa.debian.org/popcon.php?package=virt-manager 5372 虚拟机管理器:用于管理虚拟机的桌面应用程序
libvirt-bin http://qa.debian.org/popcon.php?package=libvirt-bin 4595 libvirt 库的程序
user-mode-linux http://qa.debian.org/popcon.php?package=user-mode-linux 24015 用户模式 Linux (内核)
bochs http://qa.debian.org/popcon.php?package=bochs 3018 Bochs:IA-32 PC 模拟器
qemu http://qa.debian.org/popcon.php?package=qemu 358 QEMU:快速通用处理器模拟器
qemu-system http://qa.debian.org/popcon.php?package=qemu-system 76945 QEMU:完整系统模拟二进制文件
qemu-user http://qa.debian.org/popcon.php?package=qemu-user 44931 QEMU:用户模式模拟二进制文件
qemu-utils http://qa.debian.org/popcon.php?package=qemu-utils 1374 QEMU:实用程序
qemu-kvm http://qa.debian.org/popcon.php?package=qemu-kvm 4722 KVM:在 x86 硬件上使用硬件辅助虚拟化实现完全虚拟化
virtualbox-ose http://qa.debian.org/popcon.php?package=virtualbox-ose 118 VirtualBox:i386 和 amd64 上的 x86 虚拟化解决方案
xen-tools http://qa.debian.org/popcon.php?package=xen-tools 1228 用于管理 Debian XEN 虚拟服务器的工具
wine http://qa.debian.org/popcon.php?package=wine 41 Wine:Windows API 实现(标准套件)
dosbox http://qa.debian.org/popcon.php?package=dosbox 2526 DOSBox:x86 模拟器,具有 Tandy/Herc/CGA/EGA/VGA/SVGA 图形、声音和 DOS
dosemu http://qa.debian.org/popcon.php?package=dosemu 5944 DOSEMU:Linux DOS 模拟器
vzctl http://qa.debian.org/popcon.php?package=vzctl 660 OpenVZ 服务器虚拟化解决方案 - 控制工具
vzquota http://qa.debian.org/popcon.php?package=vzquota 204 OpenVZ 服务器虚拟化解决方案 - 配额工具
lxc http://qa.debian.org/popcon.php?package=lxc 692 Linux 容器用户空间工具

请参阅 Wikipedia 文章 平台虚拟机比较 以获取不同平台虚拟化解决方案的详细比较。

9.8.2. 虚拟化工作流程

[Note] 注意

这里描述的某些功能仅在 squeeze 中可用。

[Note] 注意

lenny 版本以来,默认的 Debian 内核支持 KVM

典型的虚拟化工作流程涉及以下几个步骤。

9.8.3. 挂载虚拟磁盘镜像文件

对于原始磁盘镜像文件,请参阅 第 10.2 节 “磁盘镜像”

对于其他虚拟磁盘镜像文件,您可以使用 qemu-nbd(8) 通过 network block device 协议导出它们,并使用 nbd 内核模块挂载它们。

qemu-nbd(8) 支持 QEMU 支持的磁盘格式:QEMU 支持以下磁盘格式:raw、qcow2, qcowvmdkvdibochs、cow(用户模式 Linux 写时复制)、parallelsdmgcloopvpc、vvfat(虚拟 VFAT)和 host_device。

network block device 可以像 loop device 一样支持分区(请参阅 第 10.2.3 节 “挂载磁盘镜像文件”)。您可以按如下方式挂载 “disk.img” 的第一个分区。

# modprobe nbd max_part=16
# qemu-nbd -v -c /dev/nbd0 disk.img
...
# mkdir /mnt/part1
# mount /dev/nbd0p1 /mnt/part1
[Tip] 提示

您可以使用 qemu-nbd(8) 的 “-P 1” 选项仅导出 “disk.img” 的第一个分区。

9.8.4. Chroot 系统

chroot(8) 提供了在单个系统上同时运行 GNU/Linux 环境的不同实例的最基本方法,而无需重启。

[Caution] 注意

以下示例假设父系统和 chroot 系统共享相同的 CPU 架构。

您可以按照以下步骤,通过在 script(1) 下运行 pbuilder(8) 程序来学习如何设置和使用 chroot(8)

$ sudo mkdir /sid-root
$ sudo pbuilder --create --no-targz --debug --buildplace /sid-root

您可以看到 debootstrap(8)cdebootstrap(1) 如何在 “/sid-root” 下为 sid 环境填充系统数据。

[Tip] 提示

这些 debootstrap(8)cdebootstrap(1) 用于通过 Debian 安装程序安装 Debian。它们也可以用于在不使用 Debian 安装盘的情况下,而是从另一个 GNU/Linux 发行版安装 Debian 到系统。

$ sudo pbuilder --login --no-targz  --debug --buildplace /sid-root

您可以看到如何在 sid 环境下创建一个系统 shell,如下所示。

  1. 复制本地配置(“/etc/hosts”、“/etc/hostname”、“/etc/resolv.conf”)

  2. 挂载 “/proc” 文件系统

  3. 挂载 “/dev/pts” 文件系统

  4. 创建 “/usr/sbin/policy-rc.d”,使其始终以 101 退出

  5. 运行 “chroot /sid-root bin/bash -c 'exec -a -bash bin/bash'

[Note] 注意

chroot 下的某些程序可能需要访问比 pbuilder 提供的更多的父系统文件才能正常运行。例如,“/sys”、“/etc/passwd”、“/etc/group”、“/var/run/utmp”、“/var/log/wtmp” 等可能需要进行绑定挂载或复制。

[Note] 注意

/usr/sbin/policy-rc.d” 文件阻止守护程序在 Debian 系统上自动启动。请参阅 “/usr/share/doc/sysv-rc/README.policy-rc.d.gz”。

[Tip] 提示

专用 chroot 软件包 pbuilder 的最初目的是构建一个 chroot 系统并在 chroot 内部构建软件包。它是用于检查软件包的构建依赖项是否正确,并确保结果软件包中不存在不必要和错误的构建依赖项的理想系统。

[Tip] 提示

类似的 schroot 软件包可能会给您在 amd64 父系统下运行 i386 chroot 系统的想法。

9.8.5. 多个桌面系统

我建议您在 Debian stable 系统上使用 QEMUVirtualBox,通过虚拟化安全地运行多个桌面系统。这些使您能够运行 Debian unstabletesting 的桌面应用程序,而不会带来通常与之相关的风险。

由于纯 QEMU 非常慢,因此建议在主机系统支持的情况下使用 KVM 加速它。

包含 QEMU 的 Debian 系统的虚拟磁盘镜像 “virtdisk.qcow2” 可以使用 debian-installer: Small CDs 创建,如下所示。

$ wget http://cdimage.debian.org/debian-cd/5.0.3/amd64/iso-cd/debian-503-amd64-netinst.iso
$ qemu-img create -f qcow2 virtdisk.qcow2 5G
$ qemu -hda virtdisk.qcow2 -cdrom debian-503-amd64-netinst.iso -boot d -m 256
...

更多技巧请参阅 Debian wiki: QEMU

VirtualBox 附带 Qt GUI 工具,并且非常直观。其 GUI 和命令行工具在 VirtualBox 用户手册VirtualBox 用户手册 (PDF) 中进行了解释。

[Tip] 提示

虚拟化下运行其他 GNU/Linux 发行版(如 UbuntuFedora)是学习配置技巧的好方法。其他专有操作系统也可以在此 GNU/Linux 虚拟化下良好运行。