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 报告您的介质容量较小,请不要担心 - 这只是定义问题。
首先,确保您的 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 调用。)
有两种访问磁盘的替代方法:创建一个或多个分区的普通方法,或者只是访问原始驱动器,这在 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 的软件包。
对于真正好奇但仍未决定的人,我整理了一些 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!
这是一个在我的机器上访问 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
让我们在介质上创建一个基于 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
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
/dev/sda /mnt/mo ext2 defaults,noauto 0 0
yksi:/mnt/mo# umount /mnt/mo # (Whoops!) umount: /mnt/mo: device is busy yksi:/mnt/mo# cd .. yksi:/mnt# umount /mnt/mo yksi:/mnt#