下一页 上一页 目录

3. 磁光技术 - Daniel Kobras

3.1 简介

Daniel Kobras <kobras@linux.de>

磁光驱动器使用“远场”磁场和激光来改变磁介质的极化方向。在低于 180-200°C (350-390°F) 的温度下,磁极化方向被“冻结”在介质中。然而,当加热到高于所谓的居里温度时,静态外部磁场可以改变极化方向。当介质冷却到低于其居里温度时,信息再次被冻结。高功率写入激光用于将磁盘表面加热到合适的温度,此时“远场”可以在磁盘磁表面上设置极化方向。

回读基于所谓的克尔效应,即取决于磁盘表面磁场的方向,入射激光束的偏振面会略微旋转,从而可以恢复信息。

使用激光进行极化方向改变使得位和磁道密度远高于传统的“飞行”磁头。“远场”意味着不再有“磁头碰撞” - 这是假设您的磁盘标签在加载期间没有剥落,或者您没有在磁盘盒上留下那些粘性垫。如今,最常用的 3.5 英寸介质的容量为每盘片 640MB[*],但仍有 540MB、230MB 和 128MB 的介质。在某些型号上,介质的两面都被使用,容量高达 1.3GB - 您必须取出介质并将其翻过来才能使用另一面的 640MB。还有 5.25 英寸的介质,总容量高达 2.6GB,但这些也必须翻转。

普通磁光介质的主要缺点是它们需要额外的擦除周期,这大大降低了写入速度。这就是 LIMDOW 介质的用武之地。LIMDOW(光强度调制直接覆写)磁盘使用更复杂的五层不同磁性层。因此,可以省略擦除周期,从而将速度提高 33%,因为只需要执行一个写入和一个验证周期。回读与普通磁盘相同。如果您想使用 LIMDOW 介质,请查阅您的驱动器手册。我只在使用富士通的 M2513 时有使用 LIMDOW 的经验,效果很好。至于其他驱动器,我就不清楚了。

制造商声称磁光介质的寿命为 30 年及以上。磁盘可以被重写至少 1000 万次(LIMDOW 介质为 100 万次)。据称读取至少可以安全进行 1 亿次。

[*] 关于 1MB 应该理解为 1x1,000x1,000 字节还是 1x1,024x1,024 字节,存在某种宗教式的讨论。这里我们使用 1MB==1,000,000 字节,这是供应商出于显而易见的原因而偏好的定义。如果 Linux 报告您的介质容量较小,请不要担心 - 这只是定义问题。

3.2 设置

首先,确保您的 MO 驱动器跳线设置合理,即确保其 SCSI ID 在您的系统上是唯一的,奇偶校验和 SCAM 模式设置与您的其他 SCSI 设备以及控制器相似,并且 _不要_ 启用任何看起来奇怪的选项,例如“Mac 模式”之类的。您的驱动器可能配备了内部写入缓存,但由于 Linux 本身已经做了相当不错的缓存,所以不要期望获得太多的性能提升,如果有的话。还要记住,每增加一级缓存,在硬件故障的情况下都可能导致数据丢失或损坏。因此,建议的偏执设置是关闭写入缓存。

只要您不使用 640MB 的磁盘,设置 MO 驱动器就非常简单。假设您的驱动器已正确安装,在启动/insmod 时,您的 SCSI 控制器应通知您新添加的驱动器并配置另一个 SCSI 设备,如 /dev/sda, /dev/sdb...(请记住,SCSI 总线是按 SCSI ID 递增的顺序扫描的,因此,如果您的 SCSI 硬盘例如 ID 为 4,以前是 /dev/sda,而您的 MO 驱动器 ID 为 3,则 MO 现在将是 /dev/sda,而硬盘将是 /dev/sdb。)使用 MO 与使用普通硬盘没有什么不同。您可以对其进行分区(有关此主题的更多信息将在下面给出),创建文件系统,像往常一样挂载它。请注意,只要磁盘已挂载,驱动器就会被锁定,您将无法更换磁盘。

尝试使 640MB 磁盘工作时要小心。这些磁盘使用 2048 字节的硬扇区大小,2.0.xx 内核将仅支持每扇区 512 和 1024 字节。但是,2048 字节的支持已添加到 2.1.32 及更高版本中。如果您出于某种原因必须坚持使用 2.0.xx,则有一些补丁程序在流传,例如在

* http://liniere.gen.u-tokyo.ac.jp/2048.html, * http://wwwcip.informatik.uni-erlangen.de/ orschaer/mo/ * http://elektra.e-technik.uni-ulm.de/ mbuck/linux/patches.html

请务必使用上述某些站点提供的 fdisk 补丁版本,或来自官方 util-linux 软件包的足够新版本,该版本支持 -b 选项。(在分区 2048 字节介质时,使用 fdisk -b 2048 /dev/sdXX 调用。)

3.3 访问

有两种访问磁盘的替代方法:创建一个或多个分区的普通方法,或者只是访问原始驱动器,这在 Win/DOS 环境中也称为超级软盘格式。

第一种方法将需要非 640MB 的磁盘或 2048 字节感知的 fdisk,后者适用于任何类型的磁盘,但是这些磁盘无法在 Windows NT 4.0 版本之前读取。富士通的网页上有评论说,将来会在 NT 中添加超级软盘支持。

假设您的 MO 驱动器是 /dev/sdb。要创建分区,只需以 root 身份输入 fdisk /dev/sdb(或者对于 640MB 介质和最新版本的 fdisk,输入 fdisk -b 2048 /dev/sdb),然后像分区硬盘一样继续操作。如果不确定该怎么做,请查看 fdisk 手册页。接下来,使用类似 mke2fs -m 0 /dev/sdb1 的命令在每个分区上创建一个文件系统。对于 640MB 磁盘,请务必指定 -b 2048 标志。如果您想改用超级软盘,请省略 fdisk 部分并在原始设备上创建文件系统,例如 mke2fs -b 2048 -m 0 /dev/sdb。mke2fs 在格式化原始设备之前会请求确认。您可能需要仔细检查 /dev/sdb *是否真的* 是您的 MO 驱动器,而不是您的硬盘 :)。在启动过程中(或加载底层 SCSI 模块时),如果 MO 驱动器中有超级软盘,Linux 可能会抱怨分区表无效。您可以安全地忽略此消息。

*注意:在整个 2.1 内核系列中,2048 字节扇区介质上的分区已损坏,这意味着您可以使用 2.1.xxx 愉快地分区您的介质,但将无法在 Linux 2.1 以外的任何操作系统中使用它们!换句话说:不要这样做。如果由于任何原因您仍然需要在 Linux 2.1 上访问您的 MO,请使用超级软盘,它们可以正常工作。希望从 Linux 2.2.2 开始,此问题已完全修复。

除 ext2 之外的文件系统也适用于非 640MB 磁盘,对于 640MB 磁盘,有一些注意事项:内核中的底层文件系统代码必须支持 2048 字节的块,并且相应的 mkfs 工具应接受类似 -b 2048 的参数来指定块大小。至少对于 2.1.xx 内核系列中的 ext2 和 msdos/vfat 代码,内核要求已得到满足。上述补丁程序也应修复 2.0.xx 内核的此问题。我没有使用其他文件系统的经验,因此我将感谢任何评论。在 mkfs 工具中,mke2fs 肯定会接受 -b 标志。mkdosfs 比较棘手:不再有顶级维护者,但某些发行版有自己的维护者并发布自己的版本。Debian 的 mkdosfs 就是一个例子。从 1.0-17 版本开始,它支持具有大扇区大小的介质。您必须添加选项 -S 2048。如果要格式化超级软盘,也请传递 -I。最新版本的 Debian mkdosfs 应该始终可以从 ftp.debian.org 获取。请注意名为 dosfstools 的软件包。

3.4 速度

对于真正好奇但仍未决定的人,我整理了一些 bonnie 返回的数据。这些数据是针对以 3600 rpm 旋转的富士通 M2513,这是一个过时的型号,现在已被以 4300 rpm 旋转的版本取代。我猜想新驱动器的传输速率将与旋转比率成比例或非常接近。测试是在运行稍微打过补丁的 2.2.2pre4 内核的情况下执行的。(嗯... 看起来我禁用了驱动器上的验证,最好不要这样做!)

LIMDOW - ext2-filesystem - superfloppy:

    -------Sequential Output-------- ---Sequential Input-- --Random--
    -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --Seeks---
 MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU  /sec %CPU
400  1024 16.3  1816  2.8   620  1.7   975 13.5  1952  2.2  41.4  0.7
                            

LIMDOW - vfat-filesystem - superfloppy:

    -------Sequential Output-------- ---Sequential Input-- --Random--
    -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --Seeks---
 MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU  /sec %CPU
400   387  8.3   410  2.9   414  3.4   669 13.4   736  5.4   5.2  3.9

底线是:vfat 的性能非常糟糕。如果可以,请使用 ext2!

3.5 示例会话

这是一个在我的机器上访问 MO 的示例


yksi:~# modprobe scsi_mod
scsi: ***** BusLogic SCSI Driver Version 2.1.15 of 17 August 1998 *****
scsi: Copyright 1995-1998 by Leonard N. Zubkoff <lnz@dandelion.com>
scsi0: Configuring BusLogic Model BT-930 PCI Ultra SCSI Host Adapter
scsi0:   Firmware Version: 5.02, I/O Address: 0xDE00, IRQ Channel: 18/Level
scsi0:   PCI Bus: 0, Device: 15, Address: 0xFE00F000, Host Adapter SCSI ID: 7
scsi0:   Parity Checking: Enabled, Extended Translation: Enabled
scsi0:   Synchronous Negotiation: Ultra, Wide Negotiation: Disabled
scsi0:   Disconnect/Reconnect: Enabled, Tagged Queuing: Enabled
scsi0:   Driver Queue Depth: 255, Scatter/Gather Limit: 128 segments
scsi0:   Tagged Queue Depth: Automatic, Untagged Queue Depth: 3
scsi0:   Error Recovery Strategy: Default, SCSI Bus Reset: Enabled
scsi0:   SCSI Bus Termination: Disabled, SCAM: Disabled
scsi0: *** BusLogic BT-930 Initialized Successfully ***
scsi0 : BusLogic BT-930
scsi : 1 host.
Vendor: PLEXTOR   Model: CD-ROM PX-32TS    Rev: 1.03
Type:   CD-ROM                             ANSI SCSI revision: 02
Vendor: FUJITSU   Model: M2513A            Rev: 1300
Type:   Optical Device                     ANSI SCSI revision: 02
scsi0: Target 1: Queue Depth 3, Synchronous at 20.0 MB/sec, offset 15
scsi0: Target 3: Queue Depth 3, Synchronous at 10.0 MB/sec, offset 10

如您所见,我连接了两个 SCSI 设备:一个 CD-ROM 驱动器和一个 MO 驱动器。由于 CD-ROM 有自己的 SCSI 设备 (/dev/scdX),因此 MO 被分配给 /dev/sda。

让我们在介质上创建一个基于 ext2 的超级软盘


yksi:~# mke2fs -m 0 -b 2048 /dev/sda
mke2fs 1.12, 9-Jul-98 for EXT2 FS 0.5b, 95/08/09
/dev/sda is entire device, not just one partition!
Proceed anyway? (y,n) y
Detected scsi removable disk sda at scsi0, channel 0, id 3, lun 0
SCSI device sda: hdwr sector= 2048 bytes. Sectors= 310352 [606 MB] [0.6 GB]
sda: Write Protect is off
 sda:
Linux ext2 filesystem format
Filesystem label=
155344 inodes, 310352 blocks
0 blocks (0.00%) reserved for the super user
First data block=0
Block size=2048 (log=1)
Fragment size=2048 (log=1)
19 block groups
16384 blocks per group, 16384 fragments per group
8176 inodes per group
Superblock backups stored on blocks:
         16384, 32768, 49152, 65536, 81920, 98304, 114688,
         131072, 147456, 163840, 180224, 196608, 212992, 229376,
         245760, 262144, 278528, 294912

Writing inode tables: done
Writing superblocks and filesystem accounting information: done

现在将介质挂载到目录 /mnt/mo(该目录已存在)。
yksi:~# mount -t ext2 /dev/sda /mnt/mo
yksi:~# ls /mnt/mo
lost+found
yksi:~# df
Filesystem         1024-blocks  Used Available Capacity Mounted on
/dev/hda6             124407   48963    69020     42%   /
/dev/hda7             256592      30   243310      0%   /tmp
/dev/hda8             124407   31750    86233     27%   /var
/dev/hda9             505440  174092   305244     36%   /home
/dev/hda10           2028098 1278972   644304     66%   /usr
/dev/hda11           2028098 1551617   371659     81%   /usr/local
/dev/sda              601134      26   601108      0%   /mnt/mo

/mnt/mo 现在可以像使用任何普通硬盘一样使用。您也可以选择在您的 /etc/fstab 中添加如下一行
/dev/sda    /mnt/mo    ext2 defaults,noauto 0 0

然后 mount /mnt/mo 就足以挂载任何 ext2 格式的介质。在从 MO 驱动器中取出介质之前,请不要忘记卸载它。
yksi:/mnt/mo# umount /mnt/mo            # (Whoops!)
umount: /mnt/mo: device is busy
yksi:/mnt/mo# cd ..
yksi:/mnt# umount /mnt/mo
yksi:/mnt#

很简单,不是吗?


下一页 上一页 目录