[KANMARS原创] - Linux下的硬盘操作
<![if !supportLists]>1. <![endif]>Fdisk命令
<![if !supportLists]>1.1.<![endif]>Fisk的用途
FDISK进行硬盘分区从实质上说就是对硬盘的一种格式化。当我们创建分区时,就已经设置好了硬盘的各项物理参数,指定了硬盘主引导记录(即MasterBootRecord,MBR)和引导记录备份的存放位置。而对于文件系统以及其他操作系统管理硬盘所需要的信息则是通过之后的高级格式化,即Format命令来实现。用一个形象的比喻,分区就好比在一张白纸上画一个大方框。而格式化好比在方框里打上格子。安装各种软件就好比在格子里写上字。分区和格式化就相当于为安装软件打基础,实际上它们为电脑在硬盘上存储数据起到标记定位的作用。
<![if !supportLists]>1.2.<![endif]>Fisk的使用方式
一般来说,建立硬盘分区的顺序是:建立基本分区→建立扩展分区→将扩展分区分成数个逻辑分区。
<![if !supportLists]>1.2.1. <![endif]>fdisk 的说明
当我们通过 fdisk 设备,进入相应设备的操作时,会发现有如下的提示;以 fdisk /dev/sda 设备为例,以下同;
[root@localhost beinan]# fdisk /dev/sda
Command
(m for help): 在这里按m ,就会输出帮助;
Command
action
a
toggle a bootable flag
b edit
bsd disklabel
c
toggle the dos compatibility flag
d
delete a partition 注:这是删除一个分区的动作;
l
list known partition types 注:l是列出分区类型,以供我们设置相应分区的类型;
m
print this menu 注:m 是列出帮助信息;
n
add a new partition 注:添加一个分区;
o
create a new empty DOS partition table
p
print the partition table 注:p列出分区表;
q
quit without saving changes 注:不保存退出;
s
create a new empty Sun disklabel
t
change a partition’s system id 注:t 改变分区类型;
u
change display/entry units
v
verify the partition table
w
write table to disk and exit 注:把分区表写入硬盘并退出;
x
extra functionality (experts only) 注:扩展应用,专家功能;
<![if !supportLists]>1.2.2. <![endif]>查看分区信息
命令如下:fdisk –l
显示结果如下:
[root@localhost ~]# |
图中含义为:有一块硬盘,设备为/dev/sda,该硬盘有78.0G,共78026450432bytes,该磁盘有逻辑磁头255个(也即是255个逻辑磁面),63个逻辑扇区(每个磁面),9486个柱面(柱面数=磁道数)。计算公式如下:
硬盘体积 (单位bytes)=磁面个数 x 扇区个数 x 每个扇区的大小512
x 柱面个数
25563**5129486=78025006080bytes
每个柱面的大小=磁面个数扇区个数512 = 25563512 = 8225280bytes=8M
这块硬盘被分为两个分区/dev/sda1和/dev/sda2
其中sda1为boot,开始柱面cylinders位置是1,结束位置是13,大小Blocks(此处的block和linux的文件块block是两个含义)为104391K,分区类型ID为83 ,即Linux分区。
其中sda2为普通分区,开始位置是14,结束位置是9486,大小Blocks为76091872.?K,加号表示没有满1K,分区类型ID为8e,即Linux的LVM分区。
<![if !supportLists]>1.2.3. <![endif]>创建分区
创建分区是比较简单的,可以按照Linux的fdisk命令提示操作。
Command (m for help): p 注:列出分区表; Disk /dev/sda: 1035 MB, 1035730944 bytes 256 heads, 63 sectors/track, 125 Units = cylinders of 16128 512 = Device Boot Start End Blocks Id Command (m for help): n 注:添加分区; Command action e extended p primary partition (1-4) p 注:添加主分区; Partition number (1-4): 1 注:添加主分区1; First cylinder (1-125, default 1): Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-125, default Command (m for help): n 注:添加新分区; Command action e extended p primary partition (1-4) p 注:添加主分区 Partition number (1-4): 2 注:添加主分区2; First cylinder (26-125, default Using default value 26 Last cylinder or +size or +sizeM or +sizeK (26-125, Command (m for help): n Command action e extended p primary partition (1-4) e 注:添加扩展分区; Partition number (1-4): 3 注:指定为3 ,因为主分区已经分了两个了,这个也算主分区,从3开始; First cylinder (51-125, default Using default value 51 Last cylinder or +size or +sizeM or +sizeK (51-125, default Using default value 125 Command (m for help): p Disk /dev/sda: 1035 MB, 1035730944 bytes 256 heads, 63 sectors/track, 125 Units = cylinders of 16128 512 = Device Boot Start End Blocks Id /dev/sda1 /dev/sda2 /dev/sda3 Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l 注:添加逻辑分区; First cylinder (51-125, default Using default value 51 Last cylinder or +size or +sizeM or +sizeK (51-125, Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l 注:添加一个逻辑分区; First cylinder (76-125, default Using default value 76 Last cylinder or +size or +sizeM or +sizeK (76-125, Command (m for help): p 列出分区表; Disk /dev/sda: 1035 MB, 1035730944 bytes 256 heads, 63 sectors/track, 125 Units = cylinders of 16128 512 = Device Boot Start End Blocks Id /dev/sda1 /dev/sda2 /dev/sda3 /dev/sda5 /dev/sda6 Command (m for help): w 保存并退出 |
<![if !supportLists]>1.2.4. <![endif]>分区格式化并加载
[root@localhost [root@localhost [root@localhost [root@localhost Filesystem 容量 已用 可用 已用% 挂载点 /dev/hda8 /dev/shm 236M 0 236M 0% /dev/shm /dev/hda10 /dev/sda6 |
<![if !supportLists]>1.2.5. <![endif]>分区删除
分区删除比较简单,用unmount命令取消挂载,然后fisk /dev/sda,然后d删除分区即可
<![if !supportLists]>2. <![endif]>fstab
<![if !supportLists]>2.1.<![endif]>fstab文件说明
文件fstab包含了你的电脑上的存储设备及其文件系统的信息。它是决定一个硬盘(分区)被怎样使用或者说整合到整个系统中的唯一文件。
这个文件的全路径是/etc/fstab。它只是一个文本文件,你能够用你喜欢的编辑器打开它,但是必须是root用户才能编辑它。同时fsck、mount、umount的等命令都利用该程序。
具体来说:用fstab可以自动挂载各种文件系统格式的硬盘、分区、可移动设备和远程设备等。对于Windows与arch双操作系统用户,用fstab挂载FAT格式和NTFS格式的分区,可以在Linux中共享windows系统下的资源。
<![if !supportLists]>2.2.<![endif]>fstab文件示例
现在让我们看一下一个典型的fstab文件:
# <file system><dir><type><options><dump><pass> none /dev/pts devpts defaults 0 0 none /dev/shm tmpfs defaults 0 0
/dev/cdrom /media/cd iso9660 ro,user,noauto,unhide 0 0 /dev/dvd /media/dvd udf ro,user,noauto,unhide 0 0 /dev/fd0 /media/fl auto user,noauto 0 0
/dev/hda1 swap swap defaults 0 0 /dev/hda4 / ext3 defaults 0 1 /dev/hda3 /home xfs rw,suid,exec,auto,nouser,async 0 2 </pass></dump></options></type></dir></file> |
一个典型的entry有下面的fields (fields用空格或tab分开):
<filesystem><dir><type><options><dump><pass>
<![if !supportLists]>2.2.1. <![endif]>file systems
<file
systems> 不是我们通常理解的文件系统,而是指设备(硬盘及其分区,DVD光驱等)。它告知我们设备(分区)的名字,这是你在命令行中挂载(mount)、卸载(umount)设备时要用到的。除了直接用设备(分区)名字,也可以用UUID或卷名。
例如 LABEL= or UUID=<uuid>。例如, LABEL=Boot' <o:p></o:p></span></span></p>
<p class=MsoNormal style='text-indent:21.2pt;mso-char-indent-count:2.02'><span
class=GramE><span lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:"微软雅黑","sans-serif"'>or</span></span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:"微软雅黑","sans-serif"'>
UUID=3e6be9de-8139-11d1-9106-a43f08d823a6’
<![if !supportLists]>2.2.2. <![endif]>dir
<dir>告诉我们设备挂载到哪里。
<![if !supportLists]>2.2.3. <![endif]>type
<type>指挂载设备或分区为何种文件系统类型(例如:ext2, ext3, reiserfs, xfs,
jfs, smbfs, iso9660, vfat, ntfs, swap等)
<![if !supportLists]>2.2.4. <![endif]>options
<options>它能使你所挂载的设备在开机时自动加载、使中文显示不出现乱码、限制对挂载分区读写权限。它是与mount命令的用法相关的,要想得到一个完整的列表,参考mount manpage.
noatime 关闭atime特性,提高性能,这是一个很老的特性,放心关闭,还能减少loadcycle
defaults 使用默认设置。等于rw,suid,dev,exec,auto,nouser,async
ro 挂载为只读权限
rw 挂载为读写权限
exec是一个默认设置项,它使在那个分区中的可执行的二进制文件能够执行。
noexec 二进制文件不允许执行。千万不要在你的root分区中用这个选项!!!
suid Permit the operation
of suid, and sgid bits.
They are mostly used to allow users on a computer system to execute binary executables with temporarily elevated privileges in order
to perform a specific task.
nosuid Blocks the operation of suid, and sgid bits.
auto 在启动或在终端中输入mount -a时自动挂载
noauto 设备(分区)只能手动挂载 The file
system can be mounted only explicitly.
iocharset=在=号后面加入你的本地编码,似乎在这个设备(分区)中做文件IO的时候就会自动做编码的格式转换。
nls=在=号后面加入你的本地编码,你的中文就不会出现乱码。
umask读写权限,比ro,rw优先
例如:umask=000或0222,使得挂载时option中有default,普通用户仍然能读写挂载设备中的东西。
sync所有的I/O将以同步方式进行
async所有的I/O将以非同步方式进行
user允许任何用户挂载设备。 Implies noexec,nosuid,nodev unless
overridden.
nouser 只允许root用户挂载。这是默认设置。
<![if !supportLists]>2.2.5. <![endif]>dump
<dump>
是dump utility用来决定是否做备份的. 安装之后(Arch Linux默认是不安装dump的), dump会检查entry并用数字来决定是否对这个文件系统进行备份。允许的数字是0和1。如果是0,dump就会忽略这个文件系统,如果是1,dump就会作一个备份。大部分的用户是没有安装dump的,所以对他们而言<dump>这个entry应该写为0。
<![if !supportLists]>2.2.6. <![endif]>pass
fsck会检查这个头目下的数字来决定检查文件系统的顺序,允许的数字是0, 1, 和2。 文件系统的<pass>选项是0将不会被fsck utility检查。root文件系统应该拥有最高的优先权, 1,而所有其它的文件系统,如果你想让它被check的话,应该写成2。
<![if !supportLists]>2.3.<![endif]>fstab 自动挂载
先在用fdisk -l(需要在root权限下)得到硬盘信息表,例如:
# /dev/sda1 /dev/sda2 /dev/sda3 /dev/sda5 /dev/sda6 /dev/sda7 /dev/sda8 |
从上面知道,这台电脑上只有一个硬盘,其中分区sda1和sda8为NTFS格式,sda1为可以启动的,因而可能为window的系统所在盘。下面把系统盘以只读方式持载上去,非系统盘sda8以读写方式挂载上去(不能挂载在"/"及其以下的任何目录)。
编辑 /etc/fstab
vim /etc/fstab /dev/sda1 /mnt/WindowsC vfat defaults,codepage=936,iocharset=cp936,umask=0222 0 0 /dev/sda8 /mnt/WindowsD ntfs defaults,iocharset=utf8,umask=000,nls=utf8 0 0 |
保存,退出。
之后运行mount –a 即可全部加载