分配磁盘空间

本文介绍了在安装FreeBSD操作系统过程中需要注意的BIOS磁盘编号问题,以及如何使用FDisk创建分区的具体步骤。强调了BIOS设置对硬盘顺序的影响,并详细解释了FreeBSD不遵循BIOS逻辑磁盘对应的原因。

第一个工作就是要分配 FreeBSD 用的硬盘空间以便 sysinstall 先做好一些准备。 为了完成这个工作,您必须先对 FreeBSD 如何找到磁盘信息做一个了解。

2.6.1 BIOS 磁盘编号

  当您在系统上安装配置 FreeBSD 之前,有一个重要的事情一定要注意,尤其是当您有多个硬盘的时候。

  在 pc 架构,当您跑像 MS-DOS® 或 Microsoft® Windows® 这种跟 BIOS 相关的操作系统的时候,BIOS 有能力改变正常的磁盘顺序, 然后这些操作系统会跟着 BIOS 做改变。这让使用者不一定非要有所谓的 “primary master” 硬盘开机。许多人发现最简单而便宜备份系统的方式就是再去买一块一模一样的硬盘,然后定期将数据从第一块硬盘复制到第二个硬盘,使用 Ghost®XCOPY。所以,当第一个硬盘死了, 或者是被病毒破坏,或者有坏轨道,他们可以调整 BIOS 中的开机顺序而直接用第二块硬盘开机。就像交换硬盘的数据线,但是无需打开机箱。

  比较昂贵,配有 SCSI 控制卡的系统通常可以延伸 BIOS 的功能来让 SCSI 设备 (可达七个) 达到类似改变顺序的功能。

  习惯于使用这种方式的使用者可能会感到惊讶, 因为在 FreeBSD 中并非如此。FreeBSD 不会参考 BIOS, 而且也不知道所谓的 “BIOS 逻辑磁盘对应” 是怎么回事。这会让人感觉很疑惑,明明就是一样的硬盘而且资料也完全从另一块复制过来的, 结果却没办法像以前那样用。

  当使用 FreeBSD 以前,请将 BIOS 中的硬盘开机顺序调回正常的顺序,并且以后不要再改变。 如果一定要交换硬盘顺序, 那请用硬件的方式, 打开机箱并调整调线。

2.6.2 使用 FDisk 创建分区

注意: 如果不再做改变,数据将会写进硬盘。如果您犯了一个错误想重新开始, 请选择 sysinstall 安装程序的退出按钮(exit)。或按 U 键来 Undo 操作。如果您的操作没有结果, 您总可以重新启动您的计算机来达到您的目的。

  当您在 sysinstall 主菜单选择使用标准安装后,您会看到下面的信息:

                                 Message
 In the next menu, you will need to set up a DOS-style ("fdisk")
 partitioning scheme for your hard disk. If you simply wish to devote
 all disk space to FreeBSD (overwriting anything else that might be on
 the disk(s) selected) then use the (A)ll command to select the default
 partitioning scheme followed by a (Q)uit. If you wish to allocate only
 free space to FreeBSD, move to a partition marked "unused" and use the
 (C)reate command.
                                [  OK  ]

                      [ Press enter or space ]

  如屏幕指示,按 Enter 键,然后您就会看到一个列表列出所有在探测设备的时候找到的硬盘。 图 2-13 范例显示的是有找到两个 IDE 硬盘的情形,这两个硬盘分别为 ad0ad2

选择要分区的硬盘

 

  您可能正在奇怪,为什么 ad1 没有列出来?为什么遗失了呢?

  试想,如果您有两个 IDE 硬盘,一个是在第一个 Primary master, 一个是 Secondary master,这样会发生什么事呢? 如果 FreeBSD 依照找到的顺序来为他们命名,如 ad0ad1 那么就不会有什么问题。

  但是,现在问题来了。如果您现在想在 primary slave 加装第三个硬盘,那么这个硬盘的名称就会是 ad1,之前的 ad1 就会变成 ad2。这会造成什么问题呢?因为设备的名称 (如 ad1s1a)是用来寻找文件系统的,因此您可能会发现,突然,您有些文件系统从此无法正确地显示出来, 必须修改 FreeBSD 配置文件(译注:/etc/fstab)才可以正确显示。

  为了解决这些问题,在配置内核的时候可以叫 FreeBSD 直接用 IDE 设备所在的位置来命名,而不是依据找到的顺序。使用这种方式的话, 在 secondary master 的 IDE 设备就 永远是 ad2,即使您的系统中没有 ad0ad1 也不受影响。

  此为 FreeBSD 内核的默认值,这也是为什么上面的画面只显示 ad0ad2 的原因。画面上这台机器的两颗硬盘是装在 primary 及 secondary 的 master 上面;并没有任何一个硬盘安装在 slave 插槽上。

  您应该选择您想安装 FreeBSD 的硬盘,然后按下 [ OK ]。之后 FDisk 就会开始,您会看到类似 图 2-14的画面。

  FDisk 的显示画面分为三个部分。

  第一部分是画面上最上面两行,显示的是目前所选择的硬盘的信息。 包含它的 FreeBSD 名称、硬盘分布以及硬盘的总容量。

  第二部分显示的是目前选择的硬盘上有哪些分区,每个分区的开始及结束位置、所占容量、FreeBSD 名称、它们的描述以及类别(sub-type)。此范例显示有两个未使用的小分区, 还有一个大的 FAT 分区, (很可能是 MS-DOSWindowsC: ), 以及一个扩展分区(在 MS-DOSWindows 里面还可以包含逻辑分区)。

  第三个部分显示 FDisk 中可用的命令。

典型的尚未编辑前的 Fdisk 分区表

 

  接下来要做的事跟您要怎么给您的硬盘分区有关。

  如果您要让 FreeBSD 使用整个硬盘(稍后您确认要 sysinstall 继续安装后会删除所有这个硬盘上的资料),那么您就可以按 A 键(Use Entire Disk )目前已有的分区都会被删除,取而代之的是一个小的,标示为 unused 的分区,以及一个大的 FreeBSD 分区。之后, 请用方向键将光标移到这个 FreeBSD 分区,然后按 S 以将此分区标记为启动分区。 您会看到类似 图 2-15 的画面。注意,在 Flags 栏中的 A 记号表示此分区是 激活 的, 因而启动将从此分区进行。

  要删除现有的分区以便为 FreeBSD 腾出空间, 您可以将光标移动到要删除的分区后按 D 键。 然后就可按 C 键,并在弹出的对话框中输入将要创建的分区的大小。 输入合适的大小后按 Enter 键。 一般而言, 这个对话框中的初始值是可以分配给该分区的最大值。它可能是最大的邻接分区或未分配的整个硬盘大小。

  如果您已经建立好给 FreeBSD 的分区 (使用像 PartitionMagic®类似的工具), 那么您可以按下 C 键来建立一个新的分区。同样的,会有对话框询问您要建立的分区的大小。

Fdisk 分区使用整个硬盘

  完成后,按 Q 键。您的变更会存在 sysinstall 中, 但是还不会真正写入您的硬盘。

在计算机系统中,合理分配和管理磁盘空间是操作系统的重要职责之一。这一过程主要涉及文件的存储方式、空闲空间的跟踪与分配策略,以及磁盘访问效率的优化。以下是几种常见的磁盘空间分配与管理方法及其特点: ### 文件分配方法 操作系统中主要有三种文件分配方法:连续分配、链接分配和索引分配。 - **连续分配**:在这种方法中,文件被存储在磁盘上的一组连续的块中。这种方法的优点是可以实现快速的顺序访问,因为文件的所有部分都紧密相连。然而,它可能导致外部碎片问题,并且在文件增长时可能需要重新分配更大的连续空间[^3]。 - **链接分配**:每个文件由一系列不连续的块组成,每个块包含指向下一个块的指针。这种分配方式解决了连续分配中的碎片问题,但增加了访问文件时的寻道开销,因为每次读取下一个块都需要一次新的磁盘访问[^1]。 - **索引分配**:这种方法使用一个索引块来记录文件所有数据块的位置。索引块可以位于磁盘上的任何位置,并且能够处理非连续的数据块。这使得索引分配既避免了碎片问题,又保持了较好的随机访问性能[^1]。 ### 空闲空间管理 为了有效地跟踪和分配磁盘上的空闲空间,操作系统通常采用以下几种技术: - **位示图(Bitmap)**:通过一个位数组来表示磁盘空间的使用情况,其中每一位对应一个磁盘块的状态(0表示空闲,1表示已用)。位示图提供了一种高效的方式来查找可用的磁盘块,并且便于实施各种分配算法,如首次适应、最佳适应等。实验中模拟了位示图管理磁盘空间的过程,包括分配和回收操作,以及输出位示图变化和物理地址[^2]。 - **空闲表法**:属于连续分配方式,为每个文件分配一块连续的存储空间。系统为外存上的所有空闲区建立一张空闲表,每个空闲区对应于一个空闲表项,并按起始盘块号递增的顺序排列。这种方法适合于文件较少且大小固定的场景,但对于动态变化的文件系统来说不够灵活[^3]。 - **空闲链表法**:将磁盘上的所有空闲盘区链接成一条链,每个盘区包含指向下一个空闲盘区的指针和本盘区大小的信息。分配时通常采用首次适应算法,而在回收盘区时,则会尝试与相邻的空闲盘区合并以减少碎片。这种方法在内存中维护链表可以提高检索速度。 ### 分配与回收过程 当需要为新文件分配磁盘空间时,操作系统首先检查当前的空闲空间管理结构(如位示图或空闲链表),找到足够大的空闲区域进行分配。如果使用的是位示图,那么就需要更新相应的位以标记这些块已被占用;如果是空闲链表,则从链表中移除相应的块或段。 回收磁盘空间时,即当文件被删除或缩减时,操作系统需要将这些不再使用的磁盘块返回到空闲池中。对于位示图来说,就是将对应的位重置为空闲状态;而对于空闲链表,则可能涉及到将回收的块插入到链表中的适当位置,并考虑是否能与周围的空闲块合并以形成更大的连续空间。 ### 示例代码 以下是一个简单的Python示例,演示如何使用位示图来模拟磁盘空间分配与回收: ```python class DiskSpaceManager: def __init__(self, total_blocks): # 初始化位示图,假设所有块初始为空闲 self.bitmap = [0] * total_blocks def allocate(self, num_blocks): # 寻找连续的num_blocks个空闲块 start = -1 count = 0 for i in range(len(self.bitmap)): if self.bitmap[i] == 0: if count == 0: start = i count += 1 if count == num_blocks: break else: count = 0 if count < num_blocks: return -1 # 没有足够的连续空闲块 # 标记这些块为已用 for i in range(start, start + num_blocks): self.bitmap[i] = 1 return start def deallocate(self, start, num_blocks): # 将指定范围内的块标记为空闲 for i in range(start, start + num_blocks): if i < len(self.bitmap): self.bitmap[i] = 0 # 创建磁盘空间管理器实例 manager = DiskSpaceManager(100) # 分配5个连续的磁盘块 allocated_start = manager.allocate(5) print(f"Allocated {5} blocks starting at block {allocated_start}") # 回收之前分配磁盘块 manager.deallocate(allocated_start, 5) print(f"Deallocated {5} blocks starting at block {allocated_start}") # 输出位示图状态 print("Bitmap after deallocation:", manager.bitmap) ``` 这段代码定义了一个`DiskSpaceManager`类,它使用一个列表作为位示图来跟踪磁盘块的状态。`allocate`方法用于分配指定数量的连续空闲块,而`deallocate`方法则用于回收这些块。最后,程序展示了如何创建实例、分配和回收磁盘空间,并输出了位示图的状态。 通过上述方法和技术,操作系统能够有效地管理和优化磁盘空间的使用,确保文件系统的稳定性和性能。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值