Linux管理员手册(3)--存贮介质

更新时间:2023-09-29 09:42:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Linux管理员手册(3)--磁盘和其他存贮介质的使用

安装和升级系统时,需要对硬盘做很多工作。必须在硬盘上做文件系统,使文件能存在其上,并为系统不同的部分保留空间。

本章说明所有这些初始化工作。通常,一旦你建立了系统,就不必再做这些工作(除了使用软盘)。如果你要增加一个新硬盘或更好地调整你的硬盘的使用,那么可能回到这一章。

管理磁盘的基本任务有:

格式化磁盘。这为磁盘进入使用做一些工作,比如检查坏扇区。(现在多数硬盘无须格式化。)

给硬盘分区,如果想用于互相不干扰的几件事。分区的一个原因是要在一个硬盘上存不同的操作系统。另一个原因是将用户文件和系统文件分开,以简化备份并在系统崩溃时有助于保护系统文件。

在每个磁盘或分区上建立合适类型的文件系统,然后文件就可以在其上产生和存取。在你建立文件系统前,磁盘对Linux没有意义。

将不同的文件系统安装起来形成一个单独的树结构,按需要可以自动或手工完成。 (手工安装的文件系统通常还要手工unmount)

5章包括虚拟内存和磁盘cache的信息,使用磁盘应该知道这些。 本章说明对硬盘、软盘、CDROM和磁带机应该知道什么。 2种设备

UNIX及Linux,识别2类设备:随机存取的块设备(如磁盘)和字符设备(如磁带和串行线),有些是串行的,有些是随机存取的。文件系统支持的每种看来是个设备文件。当读写设备文件时,数据与设备联系。这样没有必要为存取设备编制特别的程序(程序不直接获取中断或读取串口),例如,发送文件到打印机,只需:

$ cat filename > /dev/lp1 $

文件内容就被打印了(当然,文件必须是打印机能理解的格式)。当然,因为不应该让多人同时cat文件到同一打印机,一般用特定的程序发送文件去打印(通常是lpr )。这个程序能确保同时只有一个文件被打印,并自动在完成后发送下一个。多数设备有类似需要。实际上,根本很少需要关心设备文件。

因为设备被视为文件系统中的文件(在/dev 目录中),很容易看到存在哪些设备文件,使用ls 或其他的适当的命令即可。在ls -l 的输出中,第一列包含文件类型和权限。例如,查看我系统上的一个串行设备: $ ls -l /dev/cua0

crw-rw-rw- 1 root uucp 5, 64 Nov 30 1993 /dev/cua0 $

第一列第一个字符,即crw-rw-rw-中的c告诉用户文件的种类,这是一个字符设备。一般文件的第一个字符是\,目录是\,块设备是\;更多的信息见ls man页。

注意即使设备没有安装,一般所有设备文件都存在。因此有/dev/sda 文件并不意味着你真的有个SCSI硬盘。有所有的设备文件使安装程序更简单,也易于增加新硬件(无须再为产生新设备的设备文件找出正确的参数)。

硬盘

本节介绍有关硬盘的术语。如果你已经知道这些项目和内容,可以跳过本节。 硬盘包括一到数片盘片platters, 其一个或两个面surfaces涂有磁性材料用于记录数据。每面有一个读写头read-write head用于读写数据。盘片有一个共同的轴,典型的旋转速度是每分钟3600转,高性能的硬盘转速可能更高。磁头可沿着盘片的半径移动,磁头移动加上盘片旋转可以使词头存取磁盘表面的任何一个位置。

处理器(CPU)和实际磁盘通过磁盘控制器disk controller通讯。这使计算机其他部分不必知道如何使用驱动器,因为不同磁盘的控制器可以做成对计算机其他部分相同的接口。这样,计算机只要说\嗨,磁盘,给我我要的东西\,而不是用一串长而复杂的电信号来移动磁头到正确的位置,并等正确的位置到了磁头下后再做那些不愉快的工作。 (实际上,到控制器的接口仍然很复杂,但比没有好多了。) 控制器还可以做一些其他的事,比如缓冲,或自动坏扇区替换等。用电信号控制操作机械部件,

以上只是理解硬件所需的。还有其他好多工作,比如马达旋转磁盘、移动磁头,但这都与理解硬盘工作原理无关。

磁盘表面通常被分为同心圆环,叫磁道tracks,磁道又被分为扇区sectors。用这样分来将磁盘定位,用于为文件定位磁盘空间。要在硬盘上找到给定的位置,可能?quot;3面5道7扇区\。通常所有磁道有相同的扇区数,但也有硬盘在外圈磁道放较多的扇区(所有扇区用同样大小的物理空间,这样在较长的外圈磁道可以容纳更多的数据)。一般一个扇区容纳512字节数据。磁盘不能处理比一个扇区更小的数据量。

每个面以相同的方式分为磁道和扇区。这意味着当一个磁头在某个磁道时,其他磁头也在相应的位置,所有相同位置的磁道组成柱面cylinder。磁头从一个磁道(柱面)移动到另一个需要花时间,所以将经常要在一起存取的数据(如一个文件)放在一个柱面里。这改善了性能。当然不可能完全作到,文件被放在几个相分离的位置叫碎片fragmented。

磁盘的面(或头,实际是一样的)、柱面、扇区数各不相同,硬盘这些数目叫硬盘参数geometry。硬盘参数通常存在一个特定的、由电池供电的存储区中,叫CMOS RAM,操作系统在引导启动或驱动器初始化时可以从那里得到硬盘参数。 不幸的是,BIOS 有一个设计限制,就是不能在CMOS RAM中定义大于1024的磁道数,这对大硬盘来说就太小了。为了克服这个问题,硬盘控制器在磁盘参数上做了一个欺骗,用地址转换translates the addresses使计算机接受。例如,一个硬盘可能有8个磁头,2048个磁道,每磁道35个扇区。其控制器可以对计算机谎称它有16个磁头,1024个磁道,每磁道35个扇区,这样就没有超过磁道数的限制,地址转换将磁头数减半,磁道数加倍后传给硬盘。实际的算法可能更复杂,因为数量可能不象我们在这里假设的这么好(但这不影响我们理解原理)。这个转换在操作系统来看产生了错觉,并可能影响操作系统对把所有数据存在相同柱面的企图受到影响。

转换只是IDE硬盘的问题。SCSI硬盘使用连续的扇区号(即控制器将连续的扇区好转换成磁头、柱面、扇区的三参数组),对CPU与控制器的通信使用完全不同的方法,因此不会有这个问题。注意,计算机可能根本不知道一个SCSI硬盘的实际参数。

由于Linux经常不知道一个硬盘的真正参数,其文件系统也不试图将文件存在一个柱面里。而是争取给一个文件分配连续编号的山区,这样能得到类似的性能。对于控制器上有cashe或控制器能自动预取的硬盘,情况将更复杂。 每个硬盘表现为一个单独的设备文件。通常只能有2-4个IDE硬盘。这就是 /dev/hda , /dev/hdb , /dev/hdc , 和 /dev/hdd 。 SCSI是 /dev/sda , /dev/sdb , 等等。其他硬盘类型有类似的命名约定,更多的信息见[Anv]。注意硬盘的设备文件给出整个硬盘的存取,而不是分区(下面讨论的),因此如果不小心可能搞乱分区或数据。硬盘的设备文件只在存取主引导扇(也将在下面讨论)时使用。 软盘

软盘的一面或两面涂有和硬盘类似的磁性介质。软盘自己没有读写头,读写头在驱动器上。软盘相当于硬盘的一张盘片,但可移动,一个驱动器可以存取不同的软盘,而硬盘则是一个独立的单元。

如同硬盘,一张软盘也分为磁道和扇区(软盘2面上的相同的磁道组成柱面),但数量要比硬盘少得多。

软驱通常可以使用几中不同的盘片,例如,一个3.5\\\\\\'软驱可以使用720KB和1.44MB的软盘。因为软驱操作有些不同,而操作系统必须知道软盘的容量,所以软驱有许多设备文件,每个都与软驱和软盘种类有关。因此,/dev/fd0H1440 是第一个软驱(fd0),必须是3.5\\\\\\'软驱,使用3.5\\\\\\'高密度软盘(H),容量是1440KB(1440),即普通的3.5\\\\\\'HD软盘。软盘设备的命名约定见[Anv]。 软驱的名字是复杂的,因此Linux有一个特定的软驱设备类型,能自动检测软驱中软盘的种类。它使用不同的软盘类型试图读取新插入的软盘的第一个扇区,直到找到正确的一个。这自然要求软盘是已经格式化过的。自动设备叫/dev/fd0 、/dev/fd1 等。

存取软盘的自动设备的参数可用程序setfdprm 设定。这可使你使用不是通常容量的软盘,例如有非标准扇区数的软盘,或自动检测由于某种原因失败或适当的设备文件丢失。

Linux除了所有标准的,还能处理许多非标准的软盘格式。这有时需要特殊的格式化程序。我们现在先跳过这些软盘格式,同时你可以查看/etc/fdprm 文件。它定义了setfdprm 识别的设定。

操作系统必须知道软驱何时换了软盘,例如,以免使用上一张软盘的cache数据。不幸的是,当用于此的信号线断了或不好时,当在MSDOS中使用时,这并不总有效。如果你曾遇到过软驱的这种怪异的问题,可能是这个原因。解决这个问题的唯一方法是修理软驱。 CD-ROM

CD-ROM驱动器使用一个光学可读的塑料涂布的盘片。信息记录在盘片表面 的从中心的边沿的螺旋型小坑上。驱动器发出一束激光来读盘。当激光射到小坑上,激光以一种方式反射;当它射到光滑表面上,它以另一种方式反射。这很容易地编码成bit,组成信息。其他很容易,不过是机械。

CD-ROM驱动器比硬盘慢。典型的硬盘的平均寻道(seek)时间小于15毫秒,而快速的CD-ROM驱动器要花零点几秒。实际数据传输率则相当快,在数百KB/s。速度慢使CDROM驱动器不能代替硬盘使用 (有些Linux distributions提供\CD-ROM文件系统,使之不必拷贝文件到硬盘,使安装简单并节约了许多硬盘空间),虽然是可能的。要安装新软件,CD-ROM很好,因为在安装时速度并非最重要的。

有多种方法在CDROM上安排数据。最流行的是国际标准化组织定义的

ISO9660。这个标准定义了一个最小的文件系统,甚至比MSDOS更粗糙。这样,由于它是这么小,所有操作系统都可以将它映射到自己的系统。

不同UNIX不能使用ISO9660文件系统,因此开发了对这个标准的一个增强,叫Rock Ridge增强。 Rock Ridge允许长文件名、符号连接和许多其他优点,使CD-ROM更象UNIX文件系统。同时,Rock Ridge文件系统仍然是一个有效的

ISO9660文件系统,使非UNIX一样可以使用。 Linux同时支持ISO9660和Rock Ridge增强,增强被自动识别和使用。

文件系统只是一部分,许多CD-ROM包含的数据需要特定的程序存取,而多数程序不能运行在Linux下 (当然,可能运行在Linux的MSDOS仿真器dosemu下)。

CD-ROM驱动器通过相关的设备文件存取。有多种方法将CDROM连接到计算机:SCSI、声卡或EIDE。要完成这的硬件hacking工作超出了本书的范围,但连接方法决定了设备文件。指导见[Anv] 磁带

磁带驱动器使用磁带,类似 音乐用的盒带。磁带是串行的,即如果要得到给定部分的数据,必须经过所有部分。磁盘可以随机存取,即可以直接跳到磁盘上的某个部分。串行存取的磁带当然慢了。

另外一方面,磁带相当便宜,因为无须快速。也容易做得很长,因此可以容纳大量的数据。这使磁带很适于如归档、备份等无须高速的、但需要低成本和大容量的事情。 格式化

格式化在磁介质上写用于标记磁道和扇区的标志的过程。磁盘格式化前,其磁表面是完成的一块。格式化后,混沌变为秩序,建立的磁道,划分了扇区。实际细节并非准确地这样,但重要的是:磁盘不经过格式化是不能使用的。 这里术语有些模糊:MS-DOS中,格式化(format)这个词还包括了产生文件系统的过程(下面将讨论的)。这两个过程经常一起使用,尤其是软盘。当必须区分时,真正的格式化被称为低级格式化low-level formatting,而建立文件系统被成为高级格式化high-level formatting。在UNIX圈中,这两者叫格式画format和建立文件系统make a filesystem,本书中也这样称。

IDE硬盘和一些SCSI硬盘实际上厂商已经做了格式化,并无须重复;因为多数人无须关心它。实际上,格式化硬盘可能反而不好,比如因为硬盘可能需要用特定的方法格式化使坏扇区被自动替换。

磁盘经常需要特定的程序来格式化,因为驱动器的格式化逻辑的接口每个驱动器都不一样。格式化程序经常在控制器BIOS上,或用MSDOS程序提供,这都不太容易在Linux中使用。

格式化中可能会发现磁盘的坏点,叫坏块bad blocks or bad sectors。这有时由驱动器自己处理。但有时,如果坏块太多,需要一些工作来避免使用磁盘的这部分。 The logic to do this is built into the filesystem; 下面将说明如何增加这些信息到文件系统。另外,产生一个只覆盖这些坏的部分的小分区

另外,支持多种其他现存的外围文件系统,很容易与其他外围文件系统交换文件。这些外围文件系统好象是自己的一样,除了可能缺少一些一般UNIX的特征,或有些不同的局限。

msdos

与MSDOS、OS/2等的FAT文件系统兼容。

umsdos

Linux下的扩展msdos文件系统驱动,支持长文件名、所有者、允许权限、连接和设备文件。允许一个普通的msdos文件系统用于Linux,而无须为Linux建立单独的分区。

iso9660

标准CDROM文件系统,通用的Rock Ridge增强,允许长文件名。 nfs

网络文件系统,允许多台计算机之间共享文件系统,易于从所有这些计算机上存取文件。 hpfs

OS/2文件系统。

sysv

SystemV/386, Coherent, 和Xenix文件系统。

根据情况选择文件系统。如兼容性或其他原因必需使用非Linux文件系统,那就必须用。如果可以自由选择,可能最明智的选择是ext2,因为它拥有全部特征而无须忍受性能缺陷。

还有proc文件系统, 一般在/proc 目录, 它不是一个真正的文件系统,虽然好象是。proc文件系统使用户易于存取全部核心数据结构,比如进程列表。它使这些数据结构看起来象个文件系统,且此文件系统可以用所有一般的文件工具操作。例如,要得到所有进程的列表,可以使用命令 $ ls -l /proc total 0

dr-xr-xr-x 4 root root 0 Jan 31 20:37 1 dr-xr-xr-x 4 liw users 0 Jan 31 20:37 63 dr-xr-xr-x 4 liw users 0 Jan 31 20:37 94 dr-xr-xr-x 4 liw users 0 Jan 31 20:37 95 dr-xr-xr-x 4 root users 0 Jan 31 20:37 98 dr-xr-xr-x 4 liw users 0 Jan 31 20:37 99

-r--r--r-- 1 root root 0 Jan 31 20:37 devices -r--r--r-- 1 root root 0 Jan 31 20:37 dma

-r--r--r-- 1 root root 0 Jan 31 20:37 filesystems

-r--r--r-- 1 root root 0 Jan 31 20:37 interrupts -r-------- 1 root root 8654848 Jan 31 20:37 kcore -r--r--r-- 1 root root 0 Jan 31 11:50 kmsg -r--r--r-- 1 root root 0 Jan 31 20:37 ksyms -r--r--r-- 1 root root 0 Jan 31 11:51 loadavg -r--r--r-- 1 root root 0 Jan 31 20:37 meminfo -r--r--r-- 1 root root 0 Jan 31 20:37 modules dr-xr-xr-x 2 root root 0 Jan 31 20:37 net dr-xr-xr-x 4 root root 0 Jan 31 20:37 self -r--r--r-- 1 root root 0 Jan 31 20:37 stat -r--r--r-- 1 root root 0 Jan 31 20:37 uptime -r--r--r-- 1 root root 0 Jan 31 20:37 version $

(可能有些文件与进程不符。上面的例子被简短了。)

注意虽然叫文件系统,proc文件系统没有一个部分与磁盘有关,它只在核心映象中存在。任何人任何时候想看proc文件系统的任何部分,核心使它看起来好象这部分在什么地方存在(虽然没有)。因此,虽然/proc/kcore 文件有好多兆字节,但它根本没用任何磁盘空间。

应该用哪个文件系统?

一般没有什么理由用许多不同的文件系统。当前,ext2fs是最流行的,可能是最明智的选择。根据记录结构、速度、(感觉的)可靠性、兼容性和其他不同的理由,适当地使用其他文件系统。个别情况需要个别决定。 建立文件系统

用mkfs 命令建立文件系统,即初始化。实际上,对每个不同种类的文件系统有一个单独的程序。 mkfs 只是为了建立不同文件系统种类确定运行不同程序的一个前端。用-t fstype选项选择种类。

被mkfs 调用的程序有不同的命令行接口。最通用和最重要的选项如下,细节请看手册。

-t fstype

选择文件系统种类。

-c

查找坏块,初始化坏块列表。 -l filename

从文件filename读入坏块列表。

用如下命令在软盘上产生ext2文件系统: $ fdformat -n /dev/fd0H1440

Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB. Formatting ... done

$ badblocks /dev/fd0H1440 1440 > bad-blocks $ mkfs -t ext2 -l bad-blocks /dev/fd0H1440

mke2fs 0.5a, 5-Apr-94 for EXT2 FS 0.5, 94/03/10 360 inodes, 1440 blocks

72 blocks (5.00%) reserved for the super user First data block=1

Block size=1024 (log=0) Fragment size=1024 (log=0) 1 block group

8192 blocks per group, 8192 fragments per group 360 inodes per group

Writing inode tables: done

Writing superblocks and filesystem accounting information: done $

首先,格式化软盘(-n选项不进行确认,即坏块检查)。然后用badblocks 查找坏块, 输出定向到文件bad-blocks。最后,产生文件系统,坏块列表由文件badblocks 初始化。

-c选项可以与mkfs 一起使用,而无须badblocks 和一个单独的文件。如下:

$ mkfs -t ext2 -c /dev/fd0H1440

mke2fs 0.5a, 5-Apr-94 for EXT2 FS 0.5, 94/03/10 360 inodes, 1440 blocks

72 blocks (5.00%) reserved for the super user First data block=1

Block size=1024 (log=0) Fragment size=1024 (log=0) 1 block group

8192 blocks per group, 8192 fragments per group 360 inodes per group

Checking for bad blocks (read-only test): done Writing inode tables: done

Writing superblocks and filesystem accounting information: done $

使用-c比用单独使用badblocks 更方便, 但建立文件系统后检查,badblocks 是必要的。

在硬盘或分区上准备文件系统的过程和软盘是一样的,除了无须格式化。 Mount和unmount

一个文件系统可以使用之前,必须mount。操作系统然后做一些记录以确认正常。因为UNIX所有的文件在一个目录树中, mount操作的结果使新的文件系统的内容好象在某个已经mount的文件系统的一个已经存在的子目录中。 上面的mount可能使用如下命令:

$ mount /dev/hda2 /home $ mount /dev/hda3 /usr $

mount 命令使用2个参数。第一个是与包括文件系统的磁盘或分区相关的设备文件。第二个是要mount到的目录。 mount以后,这2个文件系统的内容好象是/home 和/usr 目录。这样就可以说:/dev/hda2 被mount到 /home , /usr 也同样。要看每个文件系统,就看其被安装的目录,好象它就是在那里。注意设备文件的区别,/dev/hda2 , 和安装到的目录/home 。设备文件给出硬盘原始内容的存取,安装到的目录给出磁盘上文件的存取。安装到的目录叫安装点。 Linux支持许多文件系统。mount 会试着猜测文件系统种类。也可以使用-t fstype 选项直接定义种类;这有时是必要的,因为自检测mount 并非总能成功。例如要mount一个MSDOS软盘,可以用如下命令: $ mount -t msdos /dev/fd0 /floppy $

安装点目录不必是空的,但必须存在。其中的所有文件当文件系统mount后将不可用名字存取(已经打开的文件将继续可存取。有其他目录硬连接的文件可以通过那些名字存取)。这没有坏处,反而可能更有用。例如,有人喜欢将/tmp 和/var/tmp 作为同义,将/tmp 作为/var/tmp 的符号连接。系统启动时,在/usr 文件系统被mount之前,使用驻留在根文件系统的 /var/tmp 目录。当/usr 被mount上以后,根文件系统上的/var/tmp 将不可用,如果根文件系统上不存在 /var/tmp ,那么在mount上/var 之前将不可能使用暂存文件。

如果不打算在一个文件系统上写任何东西,可以使用mount 的-r开关做一个只读mount。这将使核心停止任何对此文件系统的写要求,也将停止核心的对i节点的文件存取时间的更新。只读mount对不可写介质是必要的,例如CDROM。 细心的读者可能已经注意到一个小的逻辑问题。第一个文件系统(叫根文件系统,因为它包含根目录)如何mount,因为很明显,它不能mount到另一个文件系统? Well, the answer is that it is done by magic. The root filesystem is magically mounted at boot time, and one can rely on it to always be mounted-- 如果根文件系统不能mount,系统将不能启动。 The name of the filesystem that is magically mounted as root 被编译进核心,或用LILO或rdev 设置。

根文件系统通常先被只读mount。然后启动手稿运行fsck 校验它的有效性,如果没有问题,将re-mount它,使之可写。fsck 不能运行于一个已mount的文

件系统,因为fsck 运行时,任何文件系统的改变将导致错误。因为根文件系统在被检查时是只读,fsck 可以无虑地修复任何问题,因为re-mount 操作将刷新文件系统在内存中的所有数据。

在有其他文件系统的许多系统中,启动时要自动mount,可以在/etc/fstab 文件中定义:文件格式细节请参考fstab 的手册页。 mount特别的文件系统的特别细节依赖于许多因素,可以根据需要由每个管理员设置。 When the chapter on booting is finished, you may read all about it there.

当一个文件系统不需要再mount着,可以用umount . umount 加一个参数unmount它,参数可以是设备文件或安装点。例如,要unmount上面例子中的目录,可以用: $ umount /dev/hda2 $ umount /usr $

要了解使用这个命令的更多的说明,参阅手册。注意:记住unmount已经mount的软盘, 而不能仅仅将软盘弹出软驱!由于磁盘缓冲,在你unmount软盘之前无须回写,因此过早取出软盘将导致内容不正确。只从软盘上读还不要紧,如果写,就可能发生灾难性的损失。

mount和umount需要超级拥护特权,即只有root 用户可以做。原因是:如果任何用户都可以mount软盘到任何目录,那么很容易用软盘做,比如,用特洛伊木马替换/bin/sh , 或者其他常用的程序。但是允许用户使用软盘经常又是必要的,有几种方法:

给用户root 口令,很明显这对安全不利,但是最简单的方法。如果没有安全要求,这个方法很好,比如在非网络的、个人系统上。

使用一个程序比如sudo 允许拥护使用mount。这同样对安全不利,但没有直接给任何人超级用户特权。

让用户使用mtools , 这是一个利用MSDOS文件系统的软件包,无须mount。如果是MSDOS软盘这样做很好,否则不好。

在/etc/fstab 中用合适的选项列出软驱设备和允许的安装点。 最后一个选择可以在/etc/fstab 文件中加类似下面的一行来完成: /dev/fd0 /floppy msdos user,noauto 0 0

各列分别是:要mount的设备文件,要安装到的目录,文件系统类型,选项,备份频率(用于dump ) 和fsck 次序(定义启动时文件系统被检查的次序,0表示不检查)。

给Linux增加更多的磁盘空间

给Linux增加更多的磁盘空间很容易,至少在硬件都安装好后(硬件安装不在本书所述的范围)。如果需要,先格式化,然后产生分区和上面说过的文件系统,在/etc/fstab 中加入正确的行使之能自动mount。 节约磁盘空间的提示

节约磁盘空间的最好提示是不要安装不必要的程序。许多Linux

distributions给出安装其所带软件包某些部分的选择,分析你的需求你可能发现好多你并不需要。这会节约很多磁盘空间,因为许多程序需要很大空间。即使你需要某部分包或程序,也不一定需要其全部。例如有些在线文档可能不必要,有些GNU Emacs的Elisp文件, 有些X11的字体,或者有些编程库。

如果你不能卸装包,你可以压缩。如gzip 或zip 的压缩程序可以压缩/解压文件或文件群。gzexe 系统可以对用户透明地压缩/解压程序 (没用的程序被压缩,当被使用时解压)。实验中的DouBle 系统对程序透明地压缩文件系统中的所有文件。(如果你熟悉例如Stacker for MS-DOS等产品,原理是一样的。)

本文来源:https://www.bwwdw.com/article/e6id.html

Top