5. 分区和文件系统

问: Linux 是否支持类似 RAID 的虚拟化文件系统?
问: Linux 可以与 MS-DOS、OS/2、386BSD、Win95 共用一个硬盘吗?
问: 如何访问 MS-DOS 分区或软盘上的文件?
问: Linux 是否支持压缩的 Ext2 文件系统?
问: Linux 可以使用 Stacked/DBLSPC 等 DOS 驱动器吗?
问: Linux 可以访问 OS/2 HPFS 分区吗?
问: Linux 可以访问 Amiga 文件系统吗?
问: Linux 可以访问 BSD、SysV 等 UFS 吗?
问: Linux 可以访问 Macintosh 文件系统吗?
问: 如何在软盘上创建文件系统?
问: Linux 是否支持文件系统加密?
问: 如何无损地调整分区大小?
问: 在哪里可以找到日志文件系统?
问: 为什么我的虚拟内存交换空间无法工作?
问: 如何添加临时交换空间?

问:Linux 是否支持类似 RAID 的虚拟化文件系统?

答:最新的 Linux 内核支持软件 RAID,并且可以与 RAID 磁盘控制器一起工作。

NFS 分区的自动挂载程序是大多数 Linux 发行版的一部分。

此外,还存在一些虚拟文件系统项目。其中之一是 Linux 逻辑卷管理器,位于 http://linux.msede.com/lvm/

问:Linux 可以与 MS-DOS、OS/2、386BSD、Win95 共用一个硬盘吗?

答:可以。 Linux 支持许多文件系统,包括标准的 MS-DOS 分区方案,因此它可以与其他操作系统共用您的磁盘。

Linux 支持 Microsoft FAT 和 VFAT 文件系统的所有已知版本,包括 Windows 95、Windows 98、Windows NT、Windows 2000 和 Windows ME 使用的那些,通过可加载内核模块。 在正确配置的系统中,当挂载分区时,它们应该会自动加载。

但是请注意,许多其他操作系统可能不完全兼容。DOS 的FDISK.EXEFORMAT.EXE例如,可能会覆盖 Linux 分区中的数据,因为它们有时会错误地使用分区引导扇区而不是分区表中的分区数据。

为了防止程序这样做,最好在 Linux 下清零您创建的分区的开头,然后再使用 MS-DOS 或其他程序来格式化它。输入

 $ dd
if=/dev/zero of=/dev/hdXY bs=512 count=1

其中 hdXY 是相关分区;例如,/dev/hda1对于第一个(IDE)磁盘的第一个分区。

Linux 可以使用内置于内核的 DOS 文件系统类型或 mtools 读取和写入 DOS 和 OS/2 FAT 分区和软盘上的文件。

据报道,有一个 GPL 许可的 OS/2 设备驱动程序可以读取和写入 Linux ext2 分区。

有关 FAT32 分区支持的信息,请参阅 http://bmrc.berkeley.edu/people/chaffee/fat32.html

有关 DOS、MS Windows 和 System V 程序的仿真器的详细信息和状态,请参阅 Linux 支持哪些软件?

另请参阅“Linux 可以访问 Amiga 文件系统吗?”、“Linux 可以访问 Macintosh 文件系统吗?”、“Linux 可以访问 BSD、SysV 等 UFS 吗?”和“Linux 可以访问 SMB 文件系统吗?”

据说 NTFS 驱动程序正在开发中,它应支持压缩作为标准功能。

问:如何访问 MS-DOS 分区或软盘上的文件?

答:使用 DOS 文件系统,例如输入

 $ mkdir /dos $
mount -t msdos -o conv=text,umask=022,uid=100,gid=100 /dev/hda3 /dos

如果是软盘,请记住在弹出它之前 umount 它!

您可以使用conv=text/binary/auto, umask=nnn, uid=nnngid=nnn选项来控制 DOS 文件系统中文件的自动行尾转换、权限和所有权,因为它们出现在 Linux 下。如果通过将其放入您的/etc/fstab中来挂载您的 DOS 文件系统,则可以在那里记录选项(以逗号分隔),而不是默认值。

或者,您可以使用 mtools,可以从 FTP 站点以二进制和源形式获得。 请参阅 在哪里可以找到 Linux FTP 存档?

可以使用一个内核补丁(称为 fd-patches),该补丁允许使用具有非标准磁道数和/或扇区数的软盘;该补丁包含在 1.1 alpha 测试内核系列中。

问:Linux 是否支持压缩的 Ext2 文件系统?

答:ext2compr项目提供了一个内核补丁。 有关它们的信息位于 http://e2ompr.memalpha.cx/e2compr/

还有一个 e2compr 补丁的网站。 该代码仍然是实验性的,包括针对 2.0 和 2.1 内核的补丁。 有关该项目的更多信息,包括最新的补丁程序和邮件列表的地址,请查找 URL http://debs.fuller.edu/e2compr/

[Roderich Schupp, Peter Moulder

答:zlibc 是一个程序,它允许现有应用程序读取压缩的(GNU gzip'ed)文件,就好像它们没有被压缩一样。 查看 ftp://metalab.unc.edu/pub/Linux/libs/。 作者是 Alain Knaff。

答:还有一个压缩块设备驱动程序“DouBle”,作者是 Jean-Marc Verbavatz,它可以在内核中提供动态磁盘压缩。 仅源分发位于 ftp://metalab.unc.edu/pub/Linux/patches/diskdrives/。 该驱动程序压缩 inodes 和目录信息以及文件,因此文件系统的任何损坏都可能很严重。

答:还有一个名为 tcx(Transparently Compressed Executables)的软件包,它允许您保持不常用的可执行文件处于压缩状态,并且仅在使用时临时解压缩它们。 它位于 ftp://metalab.unc.edu/pub/Linux/utils/compress/

问:Linux 可以使用 Stacked/DBLSPC 等 DOS 驱动器吗?

答:直到最近,还不那么容易。 您可以从 DOS 模拟器(“Linux 支持哪些软件?”)访问 DOS 6.X 卷,但它比通过 DOS 内核选项、模块或 mtools 访问普通 DOS 卷更难。

最近添加了一个软件包 dmsdos,它可以读取和写入 MS-DOS 6.x 和 Win95 中的 DoubleSpace/DriveSpace 以及 Stacker 3 和 4 等压缩文件系统。 它是一个可加载内核模块。 查看 ftp://metalab.unc.edu/pub/Linux/system/filesystems/dosfs/

问:Linux 可以访问 OS/2 HPFS 分区吗?

答:可以,但 Linux 对 HPFS 分区的访问是只读的。 编译内核时或作为模块可以使用 HPFS 文件系统访问。 请参阅Documentation/filesystems/hpfs.txt内核源分发中的文件。 请参阅 如何升级/重新编译内核。 然后您可以挂载 HPFS 分区,例如使用

 $ mkdir /hpfs $ mount -t hpfs
/dev/hda5 /hpfs

问:Linux 可以访问 Amiga 文件系统吗?

答:Linux 内核支持 Amiga Fast File System (AFFS) 1.3 及更高版本,既可以作为编译时选项,也可以作为模块。 文件Documentation/filesystems/affs.txt在 Linux 内核源分发中有更多信息。

请参阅 如何升级/重新编译内核

Linux 仅支持 AFFS 硬盘分区。 由于 Amiga 软盘控制器与 PC 和工作站控制器之间的不兼容,因此不支持软盘访问。 AFFS 驱动程序还可以挂载由 Bernd Schmidt 的 Un*x Amiga Emulator 使用的磁盘分区。

问:Linux 可以访问 BSD、SysV 等 UFS 吗?

答:最新的内核可以挂载(只读)System V 使用的 UFS 文件系统; 连贯的; 辛力士; BSD; 和 SunOS、FreeBSD、NetBSD 和 NeXTStep 等衍生产品。 UFS 支持可作为内核编译时选项和模块使用。

请参阅 如何升级/重新编译内核

问:Linux 可以访问 Macintosh 文件系统吗?

答:有一组用户级程序可以读取和写入旧的 Macintosh Hierarchical File System (HFS)。 它位于metalab.unc.edu/pub/Linux/utils/disk-management/.

对更新的 HFS+ 文件系统的访问仍在开发中。

问:如何在软盘上创建文件系统?

答:如果您运行最新的 Gnome 或 KDE 桌面,您会有一个 GUI 工具可以轻松格式化软盘。

答:要在命令提示符下格式化 3.5 英寸高密度软盘

 $ fdformat /dev/fd0H1440
 $ mkfs -t ext2 -m 0 /dev/fd0H1440 1440

对于 5.25 英寸软盘,请使用/dev/fd0h1200并将 1200 适当地使用。 对于B驱动器使用/dev/fd1代替/dev/fd0.

-m 0 选项告诉 mkfs.ext2 不要在磁盘上为超级用户保留任何空间,通常最后 10% 是为 root 保留的。

第一个命令执行低级格式化。 第二个创建一个空文件系统。 您可以将软盘像硬盘分区一样挂载,然后简单地 cpmv 文件等。

设备命名约定通常与其他 unix 相同。 它们可以在 Matt Welsh 的 Installation and Getting Started 指南中找到。 请参阅 在哪里可以找到文档?。 更详细和技术的描述是 H. Peter Anvin 的 Linux Allocated Deviceshpa@zytor.com,它以 LaTeX 和 ASCII 形式包含在内核源分发中(可能在/usr/src/kernel/Documentation/),如devices.texdevices.txt.

问:Linux 是否支持文件系统加密?

答:是的。 一个文件系统 ppdd 存档在 http://pweb.de.uu.net/flexsys.mtk/

问:如何无损地调整分区大小?

答:使用 FIPS.EXE 程序,该程序包含在大多数 Linux 发行版中,在 MS-DOS 下。

答:GNU parted,一个分区编辑器,对于非专家、普通人来说已经足够稳定,可以相对放心地使用。 最新版本的源代码位于:ftp://ftp.gnu.org/pub/gnu/parted/。 还有一个启动磁盘映像,用于调整根分区大小以及在非 Linux 机器上运行 parted。 磁盘映像对于初学者来说可能更容易。 从源代码构建可能需要一些额外的配置。

Parted 还具有 Linux 和 FAT (MS-DOS) 文件系统的教程风格的纯文本文档。

答:此外,一些商业发行版带有自己的分区软件,例如 Partition Magic

问:在哪里可以找到日志文件系统?

答:Linux 实际上支持几个日志文件系统。 ext3 现在包含在当前的 2.4.x 内核中。

答:名为 Reiserfs 的日志文件系统刚刚结束测试并发布。据说它能使 Linux 比安装了 Ext2 文件系统的 Linux 运行得更快,尤其是在处理大量小文件时。

完整信息请访问 http://devlinux.org/namesys/

答:JFS 仍在开发中。

问:为什么我的虚拟内存交换区无法工作?

答:当您启动(或手动启用交换)时,您应该看到

 Adding Swap: NNNNk swap-space

如果您完全没有看到任何消息,则可能缺少

 swapon -av 

(启用交换的命令)在您的/etc/rc.local或者/etc/rc.d/*(系统启动脚本)中,或者忘记在/etc/fstab:

 /dev/hda2 none swap
sw 

中进行正确的条目,例如。

如果您看到

 Unable to find swap-space signature

您忘记运行 mkswap。请参阅手册页了解详细信息;它的工作方式与 mkfs 非常相似。

运行命令 free,除了显示可用内存外,还应显示

 total used free Swap: 10188 2960 7228

如果输入cat /proc/swaps仅显示文件或分区名称,而没有交换空间信息,则需要重新初始化交换文件或分区。

使用 fdisk (以 root 身份) 确定硬盘驱动器上的哪个分区已被指定为交换分区。在通过 swapon 启用分区之前,仍然需要使用 mkswap 初始化该分区。

[Andy Jefferson, Steve Withers]

问:如何添加临时交换空间?

答:除了交换分区之外,Linux 还可以使用交换文件。某些程序,例如 g++,可以使用大量的虚拟内存,需要临时创建额外的空间。例如,要安装额外的 64 MB 交换空间,请使用以下 shell 命令

# dd if=/dev/zero of=/swap bs=1024 count=65535
# mkswap /swap
# swapon /swap

ddcount= 参数确定交换文件的大小。在本例中,交换文件的名称是/swap,但名称和位置通常是任意的,仅取决于文件系统的可用空间以及您是否拥有在该目录中的写入权限。

当您不再需要交换空间时,请使用以下语句将其删除

# swapoff /swap
# rm /swap

另请查看 Installation HOWTOInstallation & Getting Started 以获取详细说明。

如果这仍然不能提供足够的交换空间,请参考 如何拥有超过 128Mb 的交换空间