Linux 磁盘、分区、挂载和挂载点、逻辑卷管理 (Logical Volume Manager)等
1. 硬盘类型 /dev/sda VS /dev/hda
/dev/sda
- ide (integrated drive electronics) 把盘体和控制器集成在一起
- sata (serial ATA(advanced technology attachment))
- scsi (small computer system interface)
- 光纤通道 fibre channel
其中hda、hdb分别代表第一个IDE、第二个IDE。假如你电脑上插有2个IDE硬盘,就会出现hda、hdb吗?不一定,因为貌似IDE硬盘默认有两个部分,Master和Slave,即主分区和扩展分区,而且a、b是根据IDE接口插槽顺序来分的。这样的话,第一IDE插槽主分区为hda,扩展分区为hdb,第二IDE插槽主分区为hdc,扩展分区为hdd。
但是SATA硬盘好像没有扩展分区,而且Linux识别SATA等类型装置的顺序不是按插槽顺序来的,是按照设备被侦测到的顺序来定的,比如SATA的第1、5插槽分别插有硬盘,电脑上还插有一个USB,那么启动Linux的时候,先后侦测到SATA的第1、5插槽的硬盘和USB设备,那么分配的名称就分别是sda,sdb,sdc。
但貌似,Ubuntu自8.04起,所有硬盘都编号为“sdx”,即不管IDE还是SATA,一律认作SCIS硬盘。
2. 分区
计算机中存放信息的主要的存储设备就是硬盘,但是硬盘不能直接使用,必须对硬盘进行分割,分割成的一块一块的硬盘区域就是磁盘分区。在传统的磁盘管理中,将一个硬盘分为两大类分区:主分区和扩展分区。主分区是能够安装操作系统,能够进行计算机启动的分区,这样的分区可以直接格式化,然后安装系统,直接存放文件。
在一个MBR分区表类型的硬盘中最多只能存在4个主分区。如果一个硬盘上需要超过4个以上的磁盘分块的话,那么就需要使用扩展分区了。如果使用扩展分区,那么一个物理硬盘上最多只能3个主分区和1个扩展分区。扩展分区不能直接使用,它必须经过第二次分割成为一个一个的逻辑分区,然后才可以使用。一个扩展分区中的逻辑分区可以任意多个。
磁盘分区后,必须经过格式化才能够正式使用,格式化后常见的磁盘格式有:FAT(FAT16)、FAT32、NTFS、ext2、ext3等。
那么sda1、sda2又分别代表什么呢?代表分区(Partition),比如
- P1:/dev/hda1
- P2:/dev/hda2
- L1:/dev/hda5
- L2:/dev/hda6
- L3:/dev/hda7
- L4:/dev/hda8
- L5:/dev/hda9
为什么没有hda3、4呢?因为P1~4保存给了Primary和Extended分区。一个硬盘的结构如下:
MBR|主分区1|主分区2|主分区3|主分区4(扩展分区)|, 其中扩展分区可以分为: |逻辑分区1|逻辑分区2|……|逻辑分区n|
所以说上面的P1、2指明系统有两个主分区,L1~5代表有5个逻辑分区。主分区(包括扩展分区)的总个数不能超过四个;也不能把扩展分区包围在主分区之间。
参考: http://blog.csdn.net/zollty/article/details/7001950
fdisk 命令
root@dev:/home/s1# fdisk -l
Disk /dev/sda: 250.1 GB, 250059350016 bytes //这个硬盘有250.1 GB的容量
255 heads, 63 sectors/track, 30401 cylinders, total 488397168 sectors //255个磁头;63个扇区每磁道,30401个磁柱
Units = sectors of 1 * 512 = 512 bytes //每个 cylinder(磁柱)的容量是512字节
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000d7bf1
存储容量=磁道(柱面)数×磁头数×每道扇区数×每扇区字节数 = 30401 * 255 * 63 * 512 = 25396387380 bytes
Device Boot Start End Blocks Id System //Start (开始)/End (结束):表示的一个分区从X cylinder(磁柱)开始/结束
/dev/sda1 * 2048 484298751 242148352 83 Linux //引导(Boot):表示引导分区,在上面的例子中 hda1 是引导分区
/dev/sda2 484300798 488396799 2048001 5 Extended //Blocks:表示的意思的确是容量的意思,其单位是K
/dev/sda3 484298752 484300797 1023 83 Linux
/dev/sda5 484300800 488396799 2048000 82 Linux swap / Solaris //大小,2048000/1024=2G
奇怪:这里start和end的磁柱怎么远远超过30401?
这里有一个主分区sda1,一个扩展分区sda2,sda2包括两个逻辑分区sda3和sda4.
硬盘总容量=主分区(包括扩展分区)总容量
- 主分区大小为 242148352 /1024 = 236473 M = 236 G
- 扩展分区大小为:2014001 / 1024 = 2000M = 2G
- 磁盘总容量大小为:236 + 2 = 238G
扩展分区容量=逻辑分区总容量
我们估算一个硬盘是否完全被划分,我们只要看 fdisk -l 输出的内容中的 cylinders(柱体) 上一个分区的End 和 下一个分区的Start是不是一个连续的数字,另外要看一下每个硬盘设备的fdisk -l 的开头部份,看一下他的 cylinders(柱体)的值。可见上图中,扩展分区都分完了。
df -h 命令:
注: df 下没有显示swap分区
改变Linux分区大小
1. linux根分区容量是不允许改变的,一旦改变,挂载根分区就找不到磁盘首尾位置,导致启动失败
2.实在要改变,推荐用gparted-LiveCD进行调整
一、准备
1、下载最新版本的gparted镜像文件:http://sourceforge.net/project/s ... p;package_id=173828
2、将gparted镜像文件刻录成光盘或压制在U盘上制成LiveUSB
3、虽说是无损调整,但为了安全起见(万一停电咋办?),建议备份重要数据到移动硬盘上
4、在BIOS中,将启动顺序设置为首先光驱启动(如果是用LiveUSB,应设为USB-HDD)
二、调整分区
1、将光盘放入光驱(如果是用LiveUSB,插上U盘),重启电脑
2、进入gparted启动界面,直接选Defalt settings
3、第二个界面继续按回车7 y: O. l3 A" E/ P N0 L: j
4、接下来选语言,输入“26”回车(就是简体中文,尽管汉化不全)
5、接着提示将要进入X-Windows界面,回车
6、进入gparted,就会发现和瘟到死的PQ相似的界面,实际操作也是一样的,而且也支持瘟到死分区的调整
7、点击你要腾出空间的分区,弹出右键菜单选择“Resize/Move”& Z)
8、用鼠标托动或数字精确调整要释放的空间大小,若要释放在分区头部拉左侧的控制条(输入第一行数值),若要释放在分区尾部拉右侧的控制条(输入第三行数值),调整好之后点“更改大小/移动”按钮。
9、点击欲扩大容量的分区,弹出右键菜单选择“Resize/Move”
10、按照第8步的方法操作,只是现在变成扩大分区容量而已
11、点击“Edit”菜单,选择“Apply All Operations”3
12、再次确认要调整分区容量后,gparted开始调整分区,完成后点“Close”按钮
13、点“gparted”菜单,选“Quit”关闭gparted窗口,再双击左上角的“Exit”按钮退出gparted系统
14、在弹出的窗口中选“Reboot”重启电脑,退出时系统会提示你取出光盘
三、可能存在的问题
可能会发生swap分区丢失的情况,可在终端中用“free -m”命令查看swap分区是否激活(是否显示容量),如果未激活,可用“sudo mkswap /dev/sdaX”命令(X为swap分区的编号)进行激活,并将激活所得的UUID码替换掉“/etc/fstab”文件(需要管理员权限)中原来 swap分区的UUID编码,重启后即可自动激活挂载
具体操作方法,请进Ubuntu官方论坛中查找,有教程帖8 z. \0 s8 }- M& c
警告:对swap分区的激活操作及对fstab文件的修改应谨慎,必需仔细核对修改的值
3. 挂载和挂载点
一个挂载点就是一个文件夹,将分区挂载到一个挂载点,挂载点就成了分区的入口。没有挂载分区的挂载点将使用根目录的空间,没有挂载到挂载点的分区是无法访问的,如上边第四个逻辑分区。
例如,如果分区 /dev/hda5 被 挂载在 /usr 上,这意味着所有在 /usr 之下的文件和目录在物理意义上位于 /dev/hda5 上。因此文件 /usr/share/doc/FAQ/txt/Linux-FAQ 被储存在 /dev/hda5上,而文件 /etc/X11/gdm/Sessions/Gnome 却不是。
继续以上的例子,/usr 之下的一个或多个目录还有可能是其它分区的挂载点。例如,某个分区(假设为,/dev/hda7)可以被挂载到 /usr/local 下,这意味着 /usr/local/man/whatis 将位于 /dev/hda7 上而不是 /dev/hda5 上。
linux系统中每个分区都是一个文件系统,都有自己的目录层次结构。linux会将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的总的目录层次结构。将一个文件系统的顶层目录挂到另一个文件系统的子目录上,使它们成为一个整体,称为挂载。把该子目录称为挂载点。
注意:1、挂载点必须是一个目录。
2、一个分区挂载在一个已存在的目录上,这个目录可以不为空,但挂载后这个目录下以前的内容将不可用。对于其他操作系统建立的文件系统的挂载也是这样。但是需要理解的是:光盘、软盘、其他操作系统使用的文件系统的格式与linux使用的文件系统格式是不一样的。光盘是ISO9660;软盘是fat16或ext2;windows NT是fat16、NTFS;windows98是fat16、fat32;windows2000和windowsXP是fat16、fat32、NTFS。
挂载前要了解linux是否支持所要挂载的文件系统格式。
挂载时使用mount命令:
格式:mount [-参数] [设备名称] [挂载点]
其中常用的参数有
-t<文件系统类型> 指定设备的文件系统类型,常见的有:
minix linux最早使用的文件系统
ext2 linux目前常用的文件系统
msdos MS-DOS的fat,就是fat16
vfat windows98常用的fat32
nfs 网络文件系统
iso9660 CD-ROM光盘标准文件系统
ntfs windows NT 2000的文件系统
hpfs OS/2文件系统
auto 自动检测文件系统
-o<选项> 指定挂载文件系统时的选项。有些也可用在/etc/fstab中。常用的有
codepage=XXX 代码页
iocharset=XXX 字符集
ro 以只读方式挂载
rw 以读写方式挂载
nouser 使一般用户无法挂载
user 可以让一般用户挂载设备
提醒一下,mount命令没有建立挂载点的功能,因此你应该确保执行mount命令时,挂载点已经存在。(不懂?说白了点就是你要把文件系统挂载到哪,首先要先建上个目录。这样OK?)
例子:windows98装在hda1分区,同时计算机上还有软盘和光盘需要挂载。
# mk /mnt/winc
# mk /mnt/floppy
# mk /mnt/cdrom
# mount -t vfat /dev/hda1 /mnt/winc
# mount -t msdos /dev/fd0 /mnt/floppy
# mount -t iso9660 /dev/cdrom /mnt/cdrom
现在就可以进入/mnt/winc等目录读写这些文件系统了。
自动挂载:
在/etc/fstab文件里,第一列是挂载的文件系统的设备名,第二列是挂载点,第三列是挂载的文件系统类型,第四列是挂载的选项。添加新行实现自动挂载:
/dev/hdb1 /mnt/winc vfat defaults,codepage=936,iocharset=cp936 0 0
/dev/hda5 /mnt/wind vfat defaults,codepage=936,iocharset=cp936 0 0
4. LVM几个基本概念
操作: