本文档的版权归作者 Jean-Daniel Dodin 所有,根据以下许可协议。
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". |
本 HOWTO 中涉及的大容量存储是可重写的随机访问存储。它们大多数是磁旋转磁盘(软盘、硬盘驱动器)或闪存(USB 密钥或任何类型的存储卡)。
例如,cdrom 和 dvd 不在本 HOWTO 的讨论范围内(请参阅维基百科)。磁带也不在讨论范围内。
内核使用了大容量存储,因此基本文档可以在 内核网站上找到
参考站点应该是 国际磁盘驱动器设备和材料协会。应该是,因为这个网站不是很友好。
计算机使用二进制计数,1 和 0,1111100001110... 为了更好地读取它,人类使用半字节(4 位),通常显示为从 0 到 f 的十六进制数字 (0123456789abcdef)。半字节通常两个一组,这就构成了一个字节。最常用的存储单位是字节及其倍数,KiB(千字节)、MiB(兆字节)、GiB(千兆字节)。“i”表示二进制使用(一个 Ki 是 1024,而不是 1000),大写“B”表示字节,而不是位。
有时,块这个词被用来代替扇区。
大容量存储设备(至少是我们在此处处理的设备)以 512 字节的“扇区”存储字节。这是不均衡的,因为任何扇区计数都必须除以 2 才能得到 KiB 数,因此大多数分区软件接受字母 k (KiB)、m (MiB)、g... 作为选项。明智的人不会区分大小写。
扇区大小是可用的字节计数。真正的扇区更大,因为它必须包含管理数据。您不必担心这个。
请注意,截至 2006 年 3 月 22 日,IDEMA 宣布了一种新的扇区大小为 4kiB (4096 字节):http://www.idema.org/_smartsite/modules/local/data_file/show_file.php?cmd=download&data_file_id=1446 - doc 文件,可以使用 OpenOffice.org 打开。
旋转大容量存储设备使用磁头。真正的磁头是物理机电设备,用于写入和读取磁道。驱动器由旋转盘片制成,盘片有两面,因此磁盘每个盘片可以有两个磁头。如果有两个盘片(常见),您就有四个磁头。
磁头通过非常复杂的系统进行写入,请在此处查看详细信息:http://www.spmtips.com/library/data_storage。
磁头一起移动,全部同时移动。它们可能会旋转 - 在它们自己的中心上,当然不是盘片中心。它们也可能进行线性移动。您可以在任何 cdreader 中看到线性移动磁头的示例,观察激光头的移动。大多数磁盘都如此维基百科图片所示 http://upload.wikimedia.org/wikipedia/commons/thumb/5/5a/Hard_disk_platters_and_head.jpg/200px-Hard_disk_platters_and_head.jpg。
当您考虑所有磁头同时定义的所有磁道时,您就得到了一个柱面。因此,在旋转驱动器上,同一柱面的所有磁道都是同时读取或写入的。实际数据分布在所有盘片上。数据的实际写入方式取决于驱动器制造商,而不是用户。
小型磁盘直接用作一整批扇区。基本程序可以直接访问扇区上的数据。许多程序都这样做(例如 dd 或任何分区程序)。
但是我们生活在一个容量极高的大容量存储世界中。现在 (2009 年) TB 级容量很正常,而一个完整的 Linux 系统可以在软盘 (1440 字节) 上运行。因此,需要从一个大容量存储设备中划分出几个部分,即通过分区。
分区是将单个驱动器划分为多个逻辑驱动器的一种手段。分区是一组连续的扇区。为了减少磁头移动,分区可以“对齐”到柱面大小,即使用整数个柱面。这并非总是完成,但应该这样做,因为它对恢复有很多其他优势。
由于您可以拥有多个分区,因此您需要有一个分区表。此分区表存储在驱动器的最开始处。您不太可能需要直接使用十六进制编辑器写入字节来更改此表,因此我们将不再赘述表的位置。
周围有很多操作系统,它们都共享类似的硬件和许多分区系统。我们将仅关注在 PC 中可以找到的内容,即使现在很难定义 PC。假设,对我们来说,PC 是任何能够运行 Linux 的计算机(我知道,这并不总是真的)。
这些分区类型中的每一种都在表中用一个称为“类型”(fdisk 中的“t”)的特殊标志标记。最著名的是 Linux 分区的类型 83 和 Linux 交换分区的类型 82(十六进制数)。
请注意,大多数操作系统可以共享分区表。至少,如果磁盘与多个系统硬件兼容,这些系统应该能够看到其他系统所做的事情,而不是意外擦除驱动器。我不能肯定这在现实生活中是真的。
分区可以直接作为扇区访问,就像磁盘的任何部分一样,但通常填充有文件系统。文件系统和分区仅因为文件系统位于分区中而相关,但仅此而已。您可以拥有没有分区但有文件系统的磁盘,也可以拥有没有文件系统的分区(交换分区是最著名的)。有关文件系统的详细信息,请参阅维基百科。
总而言之,文件系统允许以人类可读的名称存储文件,并以友好的方式对文件进行排序,例如作为目录、子目录、文本、图像...
几乎所有您可以在大容量存储分区上找到的东西,除了扇区之外,从用户的角度来看,都是文件。但是计算机是好奇的极客,如果您愿意,您可以像处理磁盘一样处理文件。使用“loop”系统(大多数 Linux 内核中的默认系统),可以对文件内部进行分区,在其上创建文件系统并挂载它。这对于实验特别方便。
其中一些文件是设备或节点。分区不是文件,而是通过我们稍后将看到的特殊节点访问。这些节点不是由 touch 创建的,而是由 mknode 创建的。谨慎使用。节点需要类型(c 表示“字符”或 b 表示块)以及主设备号和次设备号。对于我们需要的,主设备号是磁盘号,次设备号是分区号。列表在 /proc/partitions 中可见
cat /proc/partitions major minor #blocks name 8 0 488386584 sda 8 1 52436128 sda1 8 2 1 sda2 8 5 2104483 sda5 8 6 20972826 sda6 8 7 52436128 sda7 8 8 360434308 sda8 |
#mknod b 8 9 /dev/sda9 |
创建一个无用的 /dev/sda9 节点,假设这不会创建分区,只创建节点。在通常的 Linux 发行版中,节点在启动时动态创建,因此任何人都不应该这样做。但是,有时自动系统会失败。
Linux 使用一种特殊的命名法来引用大容量存储,必须理解。
Linux 过去处理两种类型的驱动器,具体取决于电子接口(控制器),IDE 和 SCSI。老手们还记得 CD 刻录机通过“SCSI 仿真”访问的日子。实际上,IDE 和 SCSI 主要使用相同的底层命令,并且从 2007 年开始,随着新的“SATA”接口的出现,命名被统一了,并且在新发行版中,所有驱动器都具有相同的命名。对于这一部分,CD 或 DVD 读取器/刻录机被视为硬盘驱动器。
按照惯例,IDE 驱动器被赋予设备名称/dev/hda到/dev/hdd。Hard Drive A(/dev/hda) 是第一个驱动器,Hard Drive C(/dev/hdc) 是第三个驱动器。
典型的 PC 有两个 IDE 控制器,每个控制器可以连接两个驱动器。例如,/dev/hda是第一个 IDE 控制器上的第一个驱动器(主盘),/dev/hdd是第二个控制器上的第二个驱动器(从盘)(计算机中的第四个 IDE 驱动器)。
因此,通常情况下,具有 IDE 控制器的计算机可以容纳 4 个驱动器:/dev/hda(主通道主盘)、/dev/hdb(主通道从盘)、/dev/hdc(次通道主盘)、/dev/hdd(次通道从盘)。一些(罕见的)主板具有两个以上的控制器,一些附加卡也可以具有控制器,这些控制器按照字母顺序编号,但是必须弄清楚为特定硬件给出的实际名称是什么。
您可以将驱动器放在任何您想要的地方,不必强制填补空白。您可能有兴趣了解驱动器/cdrom 连接到什么位置,但这超出了本文档的范围。
现在,所有旋转硬盘驱动器都使用与旧 SCSI 控制器相同的名称,即将“h”替换为“s”,因此为 /dev/sda,依此类推。驱动器的数量取决于主板或扩展板上的控制器数量。通常有 4 个可用。驱动器的编号取决于控制器卡及其被内核读取的方式,因此起初很难说。
您将在某些应用程序中找到对底层 SCSI 设备和各种命名约定的引用,例如(wodim 是命令行 cd 刻录机)
wodim --scanbus scsibus1: 1,0,0 100) * 1,1,0 101) 'TSSTcorp' 'CD/DVDW TS-L632D' 'ac00' Removable CD-ROM 1,2,0 102) * 1,3,0 103) * 1,4,0 104) * 1,5,0 105) * 1,6,0 106) * 1,7,0 107) * |
您可能必须使用某种 SCSI:1,1,0 选项来访问 CDROM。尽量避免使用它,因为它非常容易出错,应该只留给程序员使用。我只是提到它,因为您并非总是可以避免它。
如果您执行 “cat /dev/ | more”,您可以看到
lrwxrwxrwx 1 root root 3 mars 9 07:56 scd0 -> sr0 (...) crw-r----- 1 root disk 21, 0 mars 9 07:56 sg0 crw-rw----+ 1 root disk 21, 1 mars 9 07:56 sg1 |
这些 scd、sr、sg 设备是底层接口(请注意“c”表示“字符”)。尽量不要使用它们。dmesg 和 more /var/log/boot.msg 应该为您提供可用的 sdxx 设备,例如(简短摘要)
<5>sd 0:0:0:0: [sda] 976773168 512-byte hardware sectors: (500GB/465GiB) <5>sd 0:0:0:0: [sda] Write Protect is off <7>sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00 |
这意味着驱动器是 /dev/sda。
但是,这些文件(由 dmesg 和 more /var/log/boot.msg 给出)过去很容易阅读,但现在不再是了。现在内核并行启动多个驱动程序,因此消息是混合的,您可能会看到
<6> sda:<6>USB Universal Host Contr'ller Interface driver v3.0 |
这并不意味着您的 sda 驱动器是 usb 驱动器,而是 usb 模块与驱动器模块同时启动并同时发送其消息。您仍然有一个 /dev/sda 驱动器。
这是插入 USB 密钥的 dmesg 内容
scsi7 : SCSI emulation for USB Mass Storage devices usb 5-3: New USB device found, idVendor=0951, idProduct=160e usb 5-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3 usb 5-3: Product: DataTraveler 2.0 usb 5-3: Manufacturer: Kingston usb 5-3: SerialNumber: 200706200000000059188185 usb-storage: device found at 9 usb-storage: waiting for device to settle before scanning scsi 7:0:0:0: Direct-Access Kingston DataTraveler 2.0 1.00 PQ: 0 ANSI: 2 sd 7:0:0:0: [sdb] 3930112 512-byte hardware sectors: (2.01GB/1.87GiB) sd 7:0:0:0: [sdb] Write Protect is off sd 7:0:0:0: [sdb] Mode Sense: 23 00 00 00 sd 7:0:0:0: [sdb] Assuming drive cache: write through sd 7:0:0:0: [sdb] 3930112 512-byte hardware sectors: (2.01GB/1.87GiB) sd 7:0:0:0: [sdb] Write Protect is off sd 7:0:0:0: [sdb] Mode Sense: 23 00 00 00 sd 7:0:0:0: [sdb] Assuming drive cache: write through sdb: sdb1 sd 7:0:0:0: [sdb] Attached SCSI removable disk sd 7:0:0:0: Attached scsi generic sg2 type 0 usb-storage: device scan complete |
您在那里看到了我们现在正在谈论的所有内容!SCSI 仿真、scsi、sd 和 sg 名称,以及对我们最重要的 sdb。
以下是高速 SDHC 卡的消息
tifm_core: MMC/SD card detected in socket 0:1 mmc1: new SDHC card at address d555 mmcblk0: mmc1:d555 SD04G 3.79GiB mmcblk0: p1 /dev/mmcblk0p1 on /media/H2SD type vfat (rw,nosuid,nodev,noatime,flush,uid=1000,utf8,shortname=lower) |
当两张卡可能都是相同的闪存芯片时,USB 密钥使用 USB 接口和 SCSI 仿真,SDHC 卡使用笔记本电脑的 PCMCIA 插槽,并使用特殊的设备命名 (/dev/mmcblk0)。就分区而言,使用方法是相同的。
分区命名比驱动器命名简单得多。分区只是被赋予从 0 开始的数字(十进制)。有时在数字前面附加一个“p”
cat /proc/partitions major minor #blocks name 8 0 488386584 sda 8 1 52436128 sda1 8 2 1 sda2 8 5 2104483 sda5 8 6 20972826 sda6 8 7 52436128 sda7 8 8 360434308 sda8 179 0 3979776 mmcblk0 179 1 3975680 mmcblk0p1 |
如您所见,分区设备在 /proc/partition 中列出。这个文件... 不是一个真实的文件,而是动态创建的。不用担心,对于我们需要的,它是一个文件。
请注意 SDHC 卡的 “p1” 分区名称。
SCSI 和所有使用新 SATA 驱动器的驱动器的最大分区数为 15,IDE 驱动器的最大分区数为 63(0 是整个驱动器,0 到 15 是四位,0 到 64 是 6 位)
并非所有数字都具有相同的含义。这种混乱来自 PC 历史。可以使用分区划分软盘,但那时 4 个分区似乎就足够了。但是后来出现了硬盘驱动器 :-) 。因此,分区号 1、2、3 和 4 是主分区。一个驱动器只能有 4 个主分区。
为了进一步扩展,我们必须使用其中一个主分区作为大的主分区,并对这个主分区进行子分区,从而拥有逻辑分区。大的扩展分区可以是 4 个中的任何一个。
因此,请记住,主分区位于驱动器内部,逻辑分区位于主分区之一内部,称为扩展分区。
创建逻辑分区后,不再建议直接写入扩展分区。写入扩展分区会擦除逻辑分区,就像直接写入硬盘驱动器会擦除分区一样。注意,这是可能的!!
如果在创建 4 个主分区后,所有磁盘空间都未使用,则剩余空间将丢失(不可用),因此大多数情况下,创建所需的主分区,然后最后创建扩展分区,占用所有剩余空间。
不必创建 4 个主分区。您可以只使用一个扩展分区(仅限 Linux),但是使用主分区有一些优势。
主分区为 4 个,第一个逻辑分区始终为 5。因此,任何编号为 5 及以上的分区都是逻辑分区。
设备文件唯一重要的事情是其主设备号和次设备号,它们显示在文件大小的位置
$ ls -l /dev/hda brw-rw---- 1 root disk 8, 0 mars 9 07:56 /dev/sda |
显示权限 (brw-rw----)、所有者 (root)、组 (disk)、主设备号 (8)、次设备号 (0)、日期 (mars 9 - 法语,无年份)、小时 (07:56) 和设备名称 (猜测 :-)。
访问设备文件时,主设备号选择要调用的设备驱动程序来执行输入/输出操作。此调用是使用次设备号作为参数完成的,驱动程序如何解释次设备号完全取决于驱动程序。驱动程序文档通常描述驱动程序如何使用次设备号。
分区被标记为容纳某种文件系统(不要与卷标混淆)。这种文件系统可以是 Linux 标准 ext3 文件系统或 Linux 交换空间,甚至是外部文件系统,如(Microsoft)NTFS 或(Sun)UFS。每个分区类型都有一个数值代码与之关联。例如,ext2 的代码是0x83Linux 交换空间的代码是0x82(0x 表示十六进制)。
分区类型代码是任意选择的(您无法弄清楚它们应该是什么),并且它们是给定操作系统特有的。因此,理论上,如果您在同一硬盘驱动器上使用两个操作系统,则相同的代码可能用于指定两种不同的分区类型。OS/2 使用 0x07 类型标记其分区,Windows NT 的 NTFS 也是如此。MS-DOS 为其各种风格的 FAT 文件系统分配了多个类型代码:0x01、0x04 和 0x06 是已知的。DR-DOS 使用 0x81 来指示受保护的 FAT 分区,从而在当时与 Linux/Minix 发生类型冲突,但 Linux/Minix 和 DR-DOS 都不再被广泛使用。
计算机上运行的每个进程都分配了许多 RAM 块。这些块称为页面。处理器在不久的将来将引用的内存页面的集合称为“工作集”。Linux 尝试预测这些内存访问(假设最近使用的页面将在不久的将来再次使用),并尽可能将这些页面保留在 RAM 中。
如果机器上运行的进程太多,内核将尝试通过将页面写入磁盘来释放 RAM。这就是交换空间的作用。它可以有效地增加您可用的内存量。但是,磁盘 I/O 比从 RAM 读取和写入 RAM 慢大约一百倍。将此视为紧急内存,而不是额外内存。
如果内存变得如此稀缺,以至于内核从一个进程的工作集中分页出来以便为另一个进程分页,则称该机器正在抖动。一些读者可能无意中经历过这种情况:硬盘驱动器疯狂地研磨,但计算机速度慢到无法使用。交换空间是您需要拥有的东西,但它不能替代足够的 RAM。
来自 fdisk 帮助
0 Vide 1e Hidden W95 FAT1 80 Old Minix bf Solaris 1 FAT12 24 NEC DOS 81 Minix / old Lin c1 DRDOS/sec (FAT- 2 XENIX root 39 Plan 9 82 Linux swap / So c4 DRDOS/sec (FAT- 3 XENIX usr 3c PartitionMagic 83 Linux c6 DRDOS/sec (FAT- 4 FAT16 <32M 40 Venix 80286 84 OS/2 hidden C: c7 Syrinx 5 Extended 41 PPC PReP Boot 85 Linux extended da Non-FS data 6 FAT16 42 SFS 86 NTFS volume set db CP/M / CTOS / . 7 HPFS/NTFS 4d QNX4.x 87 NTFS volume set de Dell Utility 8 AIX 4e QNX4.x 2nd part 88 Linux plein tex df BootIt 9 AIX bootable 4f QNX4.x 3rd part 8e Linux LVM e1 DOS access a OS/2 Boot Manag 50 OnTrack DM 93 Amoeba e3 DOS R/O b W95 FAT32 51 OnTrack DM6 Aux 94 Amoeba BBT e4 SpeedStor c W95 FAT32 (LBA) 52 CP/M 9f BSD/OS eb BeOS fs e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi ee GPT f W95 Etendu (LBA 54 OnTrackDM6 a5 FreeBSD ef EFI (FAT-12/16/ 10 OPUS 55 EZ-Drive a6 OpenBSD f0 Linux/PA-RISC b 11 Hidden FAT12 56 Golden Bow a7 NeXTSTEP f1 SpeedStor 12 Compaq diagnost 5c Priam Edisk a8 UFS Darwin f4 SpeedStor 14 Hidden FAT16 <3 61 SpeedStor a9 NetBSD f2 DOS secondary 16 Hidden FAT16 63 GNU HURD or Sys ab Amorce Darwin fb VMware VMFS 17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE 18 AST SmartSleep 65 Novell Netware b8 BSDI swap fd Linux raid auto 1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fe LANstep 1c Hidden W95 FAT3 75 PC/IX be Amorce Solaris ff BBT |
驱动器上允许的确切分区数由内核固定。因此,您可以在内核文档中找到确切的数字,最新版本维护在此处 https://linuxkernel.org.cn/pub/linux/docs/device-list/ 如果您安装了内核源代码,您可以在计算机上的 /usr/src/linux/Documentation/devices.txt 中找到您的版本。
查看“partition limit”。找到您的。常见的 SATA 数量为 31,SCSI 为 15,有些更少。