1.系统初始化:
1)系统初始化时根据MBR来识别硬盘设备的。
2)在MBR中包括用来载入操作系统的可执行代码。这个可执行代码就是MBR中的前446个字节的boot loader程序,引导加载程序。
3)在boot leader之后的64个字节的空间就是存储分区表的相关信息。
4)分区表的相关信息包括:分区号,分区的起始磁柱和磁柱的数量,所以Linux操作系统就可以根据分区表中的以上3中信息来识别硬盘设备。
- ox5或0xf:可扩展分区
- 0x82:Linux的交换分区
- 0x83:普通Linux分区
- 0x8e:Linux逻辑卷管理分区
- 0xfd:Linux的RAID分区。
MBR留给分区表64个字节,而每个分区表的大小为16个字节,所以在一个硬盘上最多可以划分4个主分区。
一个IDE硬盘最多使用63个分区。
一个SCSI的硬盘最所可使用15个分区。
分区的原因:
- 方便管理和控制。
- 提高系统的效率
- 使用磁盘的配额功能限制用户使用的磁盘量
- 便于备份和恢复
2.使用fdisk和partprobe命令来管理硬盘分区。
[root@localhost ~]# fdisk -l /dev/sda
Disk /dev/sda: 17.1 GB, 17179869184 bytes
255 heads, 63 sectors/track, 2088 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 33 265041 83 Linux
/dev/sda2 34 1053 8193150 83 Linux
/dev/sda3 1054 1314 2096482+ 82 Linux swap
/dev/sda4 1315 2088 6217155 5 Extended
/dev/sda5 1315 2088 6217123+ 83 Linux
从左到右的解释:
1)硬盘分区所对应的设备文件名(Device)
2)是否为boot分区,有 * 为boot分区,否则不是
3)其实磁柱
4)结束/终止磁柱
5)分区的数据块
6)分区号码(id)
7)分区的类型
[root@localhost ~]# fdisk /dev/sda
The number of cylinders for this disk is set to 2088.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
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 列举已知的分区类型
m print this menu 列出fdisk中使用的所有命令
n add a new partition 增加爱一个新分区
o create a new empty DOS partition table
p print the partition table 累出分区的内容
q quit without saving changes 不保存的退出
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit 保存
x extra functionality (experts only)
3.分区的格式化:
使用mke2fs /dev/sdb1
使用partprobe重新初始化内核中的分区表
创建文件系统;
mke2fs [ 选项 ] 设备文件名
- -b:定义数据块的大小,默认1KB
- -c:在创建文件系统前,检查设备上是否有坏块
- -i:定义字节数与i节点之间的比率,多少字节对应一个i节点
- -j:创建带有日志的ext3文件系统。
- -L:设置文件系统的逻辑卷标
- -m:定义超级用户预留磁盘空间的百分比
- -N:覆盖默认i节点的默认计算值
dumpe2fs 这个命令列出每个设备上文件系统的超级块和数据块组的信息
[root@localhost ~]# dumpe2fs /dev/sda1 | more
dumpe2fs 1.35 (28-Feb-2004)
Filesystem volume name: /boot
Last mounted on:
Filesystem UUID: 21fbfeae-e5d2-4e52-8e68-0cc0aab4b9c1
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery sparse_super
Default mount options: (none)
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 66264
Block count: 265040
Reserved block count: 13252
Free blocks: 237915
Free inodes: 66217
First block: 1
Block size: 1024
Fragment size: 1024
Reserved GDT blocks: 256
Blocks per group: 8192
Fragments per group: 8192
Inodes per group: 2008
Inode blocks per group: 251
Filesystem created: Tue Oct 16 15:37:27 2012
Last mount time: Thu Nov 15 10:41:04 2012
Last write time: Thu Nov 15 10:41:04 2012
Mount count: 14
Maximum mount count: -1
Last checked: Tue Oct 16 15:37:27 2012
Check interval: 0 ()
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 128
Journal inode: 8
Default directory hash: tea
Directory Hash Seed: 9a2e4851-9fcd-4fd9-abda-3fa58d2accca
Journal backup: inode blocks
4.ext2和ext3文件系统。
两种文件系统格式相同,只是ext3文件系统会在硬盘分区的最后面留出一块磁盘空间来保存日志记录。
只要在mke2fs命令中加入-j参数就可以将一个硬盘分区格式化成一个ext3的文件系统。
使用tune2fs的命令就可以将ext2的文件系统直接转化成ext3的文件系统,而且不会丢失任何数据。
5.为分区指定lable
使用e2lable
[root@localhost ~]# e2label /dev/sda1
/boot
[root@localhost ~]# e2lable /dev/sdb1 /oracle
[root@localhost ~]# blkid
/dev/sda1: LABEL="/boot" UUID="21fbfeae-e5d2-4e52-8e68-0cc0aab4b9c1" SEC_TYPE="ext3" TYPE="ext2"
/dev/sda2: LABEL="/" UUID="bf13b9c0-d2e8-43eb-ac26-693879e2fb4c" SEC_TYPE="ext3" TYPE="ext2"
/dev/sda3: TYPE="swap"
/dev/sda5: LABEL="/home" UUID="e7750c54-2d76-486d-ad05-33b8d59237d5" SEC_TYPE="ext3" TYPE="ext2"
6.文件系统的挂载与卸载
[root@localhost ~]# mount
/dev/sda2 on / type ext3 (rw)
none on /proc type proc (rw)
none on /sys type sysfs (rw)
none on /dev/pts type devpts (rw,gid=5,mode=620)
usbfs on /proc/bus/usb type usbfs (rw)
/dev/sda1 on /boot type ext3 (rw)
none on /dev/shm type tmpfs (rw)
/dev/sda5 on /home type ext3 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
[root@localhost ~]# mount /dev/sdb1 /oracle
以某个文件文件系统label形式挂载加入—L参数。
[root@localhost ~]# mount -L /oracle /oracle
命令格式:
mount [-t vfstype] [-o options] device dir
其中:
1)-t vfstype 指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。常用类型有:
光盘或光盘镜像:iso9660
Linux的ext2和ext3文件系统
DOS fat16文件系统:msdos
Windows 9x fat32文件系统:vfat
Windows NT ntfs文件系统:ntfs
Mount Windows文件网络共享:smbfs
UNIX(LINUX) 文件网络共享:nfs
2.)o options 主要用来描述设备或档案的挂接方式。常用的参数有:
suid:允许挂载的文件爱你系统使用suid或sgid的特殊权限
dev:允许挂载文件系统建立设备文件,如/dev/sda1
exec:允许挂载文件系统之后可以执行该文件系统的可执行文件。
auto:在计算机开机后自动挂载这个文件系统
nouser:只允许超级用户可以挂载这个文件系统。
async:在写数据时先写到数据缓冲区后再写到硬盘上。
loop:用来把一个文件当成硬盘分区挂接上系统
ro:采用只读方式挂接设备
rw:采用读写方式挂接设备
iocharset:指定访问文件系统所用字符集
3)device 要挂接(mount)的设备。
4)dir设备在系统上的挂接点(mount point)。
Linxu系统默认的选项是 rw,suid,dev,exec,auto,nouser,async
卸载一个设备:
umount device | mount point
fuser命令可以显示指定文件或文件系统进程的ID,以及相关的信息。
[root@localhost ~]# fuser -v /
USER PID ACCESS COMMAND
/ root 1 .rc.. init
root 2 .rc.. migration/0
root 3 .rc.. ksoftirqd/0
root 4 .rc.. events/0
重新挂载文件系统到只读状态
[root@localhost ~]# mount -o remount,ro /oracle
7.利用/etc/fstab文件在开机时挂载文件系统:
[root@localhost ~]# cat /etc/fstab
# This file is edited by fstab-sync - see 'man fstab-sync' for details
LABEL=/ / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
none /dev/pts devpts gid=5,mode=620 0 0
none /dev/shm tmpfs defaults 0 0
LABEL=/home /home ext3 defaults 1 2
none /proc proc defaults 0 0
none /sys sysfs defaults 0 0
LABEL=SWAP-sda3 swap swap defaults 0 0
/dev/hda /media/cdrom auto pamconsole,fscontext=system_u:object_r:removable_t,exec,noauto,managed 0 0
从左到右的解释:
1)设备/分区,既可以使用Label的用法也可以使用设备的表示法(如:/dev/sdb1)
2)挂载点,挂载目录
3)文件系统的类型
4)选项,挂载这个文件爱你系统时,使用的选项
5)Dump的频率,如果为0,表示不做dump(转储),为1表示做一次,一次类推
6)fsck应该是file system check的缩写,这一栏表示系统开机时检查文件系统先后次序,如果为0,表示不检查,如果为1,表示第一个检查,一次类推,最大为9,如果检查顺序相同,则由上而下依次检查。
8.虚拟内存的管理:
要在Linxu上创建一个swap分区,需要执行以下步骤。
1)创建swap分区所用的分区或文件,并且在创建分区事,需要将分区的类型设置成0x82
2)使用mkswap命令在该分区或文件上写入一个特殊的识别标识
3)将swap类型的文件系统的挂载信息加入到/etc/fstab文件中,其目的是为了当Linux自动启动时自动挂载这个分区。
4)如果虚拟内存使用的swap分区,要使用swap -a命令来启动。
[root@localhost ~]# dd if=/dev/zero of=/oracle/swapfile bs=1M count=128
dd是转换并复制文件,if(input file )=/dev/zero(一个内容全是0的文件) of(output file)=(某个文件)
9.在ext3和ext2文件系统中文件属性的设定。
1)lsattr:该命令是用来显示文件的属性
2)chattr:这个命令是用来改变文件的属性。
chattr +/-/=属性 文件
选项件man 手册
[root@localhost mypro]# lsattr main.cpp
------------- main.cpp
[root@localhost mypro]# chattr +a main.cpp
[root@localhost mypro]# lsattr main.cpp
-----a------- main.cpp
挂接光盘镜像文件
由于近年来磁盘技术的巨大进步,新的电脑系统都配备了大容量的磁盘系统,在Windows下许多人都习惯把软件和资料做成光盘镜像文件通过虚拟 光驱来使用。这样做有许多好处:一、减轻了光驱的磨损;二、现在硬盘容量巨大存放几十个光盘镜像文件不成问题,随用随调十分方便;三、硬盘的读取速度要远 远高于光盘的读取速度,CPU占用率大大降低。其实linux系统下制作和使用光盘镜像比Windows系统更方便,不必借用任何第三方软件包。
1、从光盘制作光盘镜像文件。将光盘放入光驱,执行下面的命令。
#cp /dev/cdrom /home/sunky/mydisk.iso 或
#dd if=/dev/cdrom of=/home/sunky/mydisk.iso
注:执行上面的任何一条命令都可将当前光驱里的光盘制作成光盘镜像文件/home/sunky/mydisk.iso
2、将文件和目录制作成光盘镜像文件,执行下面的命令。
#mkisofs -r -J -V mydisk -o /home/sunky/mydisk.iso /home/sunky/ mydir
注:这条命令将/home/sunky/mydir目录下所有的目录和文件制作成光盘镜像文件/home/sunky/mydisk.iso,光盘卷标为:mydisk
3、光盘镜像文件的挂接(mount)
#mkdir /mnt/vcdrom
注:建立一个目录用来作挂接点(mount point)
#mount -o loop -t iso9660 /home/sunky/mydisk.iso /mnt/vcdrom
注:使用/mnt/vcdrom就可以访问盘镜像文件mydisk.iso里的所有文件了。
挂接移动硬盘
对linux系统而言,USB接口的移动硬盘是当作SCSI设备对待的。插入移动硬盘之前,应先用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况。
[root at pldyrouter /]# fdisk -l
Disk /dev/sda: 73 dot 4 GB, 73407820800 bytes
255 heads, 63 sectors/track, 8924 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 4 32098+ de Dell Utility
/dev/sda2 * 5 2554 20482875 7 HPFS/NTFS
/dev/sda3 2555 7904 42973875 83 Linux
/dev/sda4 7905 8924 8193150 f Win95 Ext'd (LBA)
/dev/sda5 7905 8924 8193118+ 82 Linux swap
在这里可以清楚地看到系统有一块SCSI硬盘/dev/sda和它的四个磁盘分区/dev/sda1 -- /dev/sda4, /dev/sda5是分区/dev/sda4的逻辑分区。接好移动硬盘后,再用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况
[root at pldyrouter /]# fdisk -l
Disk /dev/sda: 73 dot 4 GB, 73407820800 bytes
255 heads, 63 sectors/track, 8924 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 4 32098+ de Dell Utility
/dev/sda2 * 5 2554 20482875 7 HPFS/NTFS
/dev/sda3 2555 7904 42973875 83 Linux
/dev/sda4 7905 8924 8193150 f Win95 Ext'd (LBA)
/dev/sda5 7905 8924 8193118+ 82 Linux swap
Disk /dev/sdc: 40.0 GB, 40007761920 bytes
255 heads, 63 sectors/track, 4864 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdc1 1 510 4096543+ 7 HPFS/NTFS
/dev/sdc2 511 4864 34973505 f Win95 Ext'd (LBA)
/dev/sdc5 511 4864 34973473+ b Win95 FAT32
大家应该可以发现多了一个SCSI硬盘/dev/sdc和它的两个磁盘分区/dev/sdc1?、/dev/sdc2,其中/dev/sdc5是/dev/sdc2分区的逻辑分区。我们可以使用下面的命令挂接/dev/sdc1和/dev/sdc5。
#mkdir -p /mnt/usbhd1
#mkdir -p /mnt/usbhd2
注:建立目录用来作挂接点(mount point)
#mount -t ntfs /dev/sdc1 /mnt/usbhd1
#mount -t vfat /dev/sdc5 /mnt/usbhd2
注:对ntfs格式的磁盘分区应使用-t ntfs 参数,对fat32格式的磁盘分区应使用-t vfat参数。若汉字文件名显示为乱码或不显示,可以使用下面的命令格式。
#mount -t ntfs -o iocharset=cp936 /dev/sdc1 /mnt/usbhd1
#mount -t vfat -o iocharset=cp936 /dev/sdc5 /mnt/usbhd2
linux系统下使用fdisk分区命令和mkfs文件系统创建命令可以将移动硬盘的分区制作成linux系统所特有的ext2、ext3格式。这样,在linux下使用就更方便了。使用下面的命令直接挂接即可。
#mount /dev/sdc1 /mnt/usbhd1
挂接U盘
和USB接口的移动硬盘一样对linux系统而言U盘也是当作SCSI设备对待的。使用方法和移动硬盘完全一样。插入U盘之前,应先用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况。
[root at pldyrouter root]# fdisk -l
Disk /dev/sda: 73 dot 4 GB, 73407820800 bytes
255 heads, 63 sectors/track, 8924 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 4 32098+ de Dell Utility
/dev/sda2 * 5 2554 20482875 7 HPFS/NTFS
/dev/sda3 2555 7904 42973875 83 Linux
/dev/sda4 7905 8924 8193150 f Win95 Ext'd (LBA)
/dev/sda5 7905 8924 8193118+ 82 Linux swap
插入U盘后,再用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况。
[root at pldyrouter root]# fdisk -l
Disk /dev/sda: 73 dot 4 GB, 73407820800 bytes
255 heads, 63 sectors/track, 8924 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 4 32098+ de Dell Utility
/dev/sda2 * 5 2554 20482875 7 HPFS/NTFS
/dev/sda3 2555 7904 42973875 83 Linux
/dev/sda4 7905 8924 8193150 f Win95 Ext'd (LBA)
/dev/sda5 7905 8924 8193118+ 82 Linux swap
Disk /dev/sdd: 131 MB, 131072000 bytes
9 heads, 32 sectors/track, 888 cylinders
Units = cylinders of 288 * 512 = 147456 bytes
Device Boot Start End Blocks Id System
/dev/sdd1 * 1 889 127983+ b Win95 FAT32
Partition 1 has different physical/logical endings:
phys=(1000, 8, 32) logical=(888, 7, 31)
系统多了一个SCSI硬盘/dev/sdd和一个磁盘分区/dev/sdd1,/dev/sdd1就是我们要挂接的U盘。
#mkdir -p /mnt/usb
注:建立一个目录用来作挂接点(mount point)
#mount -t vfat /dev/sdd1 /mnt/usb
注:现在可以通过/mnt/usb来访问U盘了, 若汉字文件名显示为乱码或不显示,可以使用下面的命令。
#mount -t vfat -o iocharset=cp936 /dev/sdd1 /mnt/usb
挂接Windows文件共享
Windows网络共享的核心是SMB/CIFS,在linux下要挂接(mount)windows的磁盘共享,就必须安装和使用samba 软件包。现在流行的linux发行版绝大多数已经包含了samba软件包,如果安装linux系统时未安装samba请首先安装samba。当然也可以到 www.samba.org网站下载......新的版本是3.0.10版。
当windows系统共享设置好以后,就可以在linux客户端挂接(mount)了,具体操作如下:
# mkdir –p /mnt/samba
注:建立一个目录用来作挂接点(mount point)
# mount -t smbfs -o username=administrator,password=pldy123 //10.140.133.23/c$ /mnt/samba
注:administrator 和 pldy123 是ip地址为10.140.133.23 windows计算机的一个用户名和密码,c$是这台计算机的一个磁盘共享
如此就可以在linux系统上通过/mnt/samba来访问windows系统磁盘上的文件了。以上操作在redhat as server 3、redflag server 4.1、suse server 9以及windows NT 4.0、windows 2000、windows xp、windows 2003环境下测试通过。
挂接UNIX系统NFS文件共享
类似于windows的网络共享,UNIX(Linux)系统也有自己的网络共享,那就是NFS(网络文件系统),下面我们就以SUN Solaris2.8和REDHAT as server 3 为例简单介绍一下在linux下如何mount nfs网络共享。
在linux客户端挂接(mount)NFS磁盘共享之前,必须先配置好NFS服务端。
1、Solaris系统NFS服务端配置方法如下:
(1)修改 /etc/dfs/dfstab, 增加共享目录
share -F nfs -o rw /export/home/sunky
(2)启动nfs服务
# /etc/init.d/nfs.server start
(3)NFS服务启动以后,也可以使用下面的命令增加新的共享
# share /export/home/sunky1
# share /export/home/sunky2
注:/export/home/sunky和/export/home/sunky1是准备共享的目录
2、linux系统NFS服务端配置方法如下:
(1)修改 /etc/exports,增加共享目录
/export/home/sunky 10.140.133.23(rw)
/export/home/sunky1 *(rw)
/export/home/sunky2 linux-client(rw)
注:/export/home/目录下的sunky、sunky1、sunky2是准备共享的目录,10.140.133.23、*、 linux-client是被允许挂接此共享linux客户机的IP地址或主机名。如果要使用主机名linux-client必须在服务端主机 /etc/hosts文件里增加linux-client主机ip定义。格式如下:
10.140.133.23 linux-client
(2)启动与停止NFS服务
/etc/rc.d/init.d/portmap start (在REDHAT中PORTMAP是默认启动的)
/etc/rc.d/init.d/nfs start 启动NFS服务
/etc/rc.d/init.d/nfs stop 停止NFS服务
注:若修改/etc/export文件增加新的共享,应先停止NFS服务,再启动NFS服务方能使新增加的共享起作用。使用命令exportfs -rv也可以达到同样的效果。
3、linux客户端挂接(mount)其他linux系统或UNIX系统的NFS共享
# mkdir –p /mnt/nfs
注:建立一个目录用来作挂接点(mount point)
#mount -t nfs -o rw 10.140.133.9:/export/home/sunky /mnt/nfs
注:这里我们假设10.140.133.9是NFS服务端的主机IP地址,当然这里也可以使用主机名,但必须在本机/etc/hosts文件里增加服务端ip定义。/export/home/sunky为服务端共享的目录。
如此就可以在linux客户端通过/mnt/nfs来访问其它linux系统或UNIX系统以NFS方式共享出来的文件了。以上操作在 redhat as server 3、redflag server4.1、suse server 9以及Solaris 7、Solaris 8、Solaris 9 for x86&sparc环境下测试通过。
权限问题:
假設 server 端的使用者 jack, user id 為 1818, gid 為 1818, client 端也有一個使用者 jack,但是 uid 及 gid 是 1818。client 端的 jack 希望能完全讀寫 server 端的 /home/jack 這個目錄。server 端的 /etc/exports 是
這樣寫的:
/home/jack *(rw,all_squash,anonuid=1818,anongid=1818)
這個的設定檔的意思是,所有 client 端的使用者存取 server 端 /home/jack 這
目錄時,都會 map 成 server 端的 jack (uid,gid=1818)。我 mount 的結果是
1. client 端的 root 可以完全存取該目錄, 包括讀、寫、殺……等
2. client 端的 jack (uid,gid=1818) 我可以做:
rm -rf server_jack/*
cp something server_jack/
mkdir server_jack/a