整颗磁盘的组成主要有: 囿形的磁盘盘(主要记录数据的部分) 机械手臂,与在机械手臂上的磁盘读取头(可擦写磁盘盘上的数据) 主轴马达,可以转动磁盘盘,让机械手臂的读取头在磁盘盘上读写数据 磁盘盘上的物理组成则为: 扇区(Sector)为最小的物理储存单位,每个扇区为 512 bytes 将扇区组成一个圆,那就是磁柱(Cylinder),磁柱是分割槽(partition)的最小单位 第一个扇区最重要,里面有:(1)主要开机区(Master boot record, MBR)及分割表(partition table), 其中MBR占有446bytes,而partition table则占有64bytes 磁盘分区完毕后还需要进行格式化(format),为什么要格式化: 因为每种操作系统所设定的文件属性/权限并不相同, 为了存放这些档案所需的数据,因此就需要将分割捕行格式化,以成为操作系统能够利用的『文件系统格式(filesystem)』。 一个 filesystem 就是一个分割槽(partition) 各种接口的磁盘在Linux中的文件名分别为: /dev/sd[a-p][1-15]:为SCSI, SATA, USB, Flash随身碟等接口的磁盘文件名 /dev/hd[a-d][1-63]:为 IDE 接口的磁盘文件名 主分区和逻辑分区 因为分割表仅有64bytes而已, 因此最多只能记录四笔分割槽的记录 这四笔记录我们称为主要(primary)或延伸(extended)分割槽, 其中延伸分割槽还可以再分割出逻辑分割槽(logical),而能被格式化的则仅有主要分割与逻辑分割槽而已 1、主要分割与延伸分割最多可以有四笔(硬盘的限制) 2、延伸分割最多只能有一个(操作系统的限制) 3、逻辑分割是由延伸分割持续切割出来的分割槽 4、能够被格式化后,作为数据存取的分割槽为主要分割与逻辑分割。延伸分割无法格式化 5、逻辑分割的数量依操作系统而不同,在Linux系统中,IDE硬盘最多有59个逻辑分割(5号到63号),SATA硬盘则有11个逻辑分割(5号到15号)。 inode,block,superblock inode:记录档案的属性,一个档案占用一个inode,同时记录此档案的数据所在的 block号码 block:实际记录档案的内容,若档案太大时,会占用多个 block superblock:超级区块(superblock)会记录整个文件系统的整体信息,包括 inode 与 block 的总量、使用量、剩余量,以及文件系统的格式不相关信息等 Ext2 文件系统中所支持的 block 大小有 1K, 2K 及 4K 三种而已 由于block大小的差异,会导致该文件系统能够支持的最大磁盘容量与最大单一档案容量并不相同 Block大小 1KB 2KB 4KB 最大单一档案限制 16GB 256GB 2TB 最大文件系统总容量 2TB 8TB 16TB inode 每个inode大小均固定为 128 bytes, 承上,因此文件系统能够建立的档案数量与inode的数量有关 系统读取档案时需要先找到inode,并分析inode所记录的权限与用户是否符合,若符合才能够开始实际读取blck的内容====inode索引block Superblock (超级区块) 记录此 filesystem 的整体信息,block与inode的总量 block与inode的大小(block为 1, 2, 4K,inode为128bytes) filesystem 的挂载时间、最近一次写入数据的时间、最近一次检验磁盘(fsck)的时间道改件系统的相关信息一个valid bit数值,若此文件系统已被挂载,则valid bit为0 ,若未被挂载,则valid bit为 1 每个区段不 superblock 的信息都可以使用 dumpe2fs 这个指令来查询的 [root@www ~]# dumpe2fs [-bh] 设备名称 选项不参数: -b :列出保留为坏轨的部分 -h :仅列出 superblock 的数据,不会列出其他的区段内容! [root@www ~]# dumpe2fs /dev/sda1 可以查看inode和block的总数,和剩余多少等。 ext3比ext2的优点: 1、多了日志功能 2、可利用性 这意味着从系统中止到快速重新复原而不是持续的让e2fsck执行长时间的修复 3、数据完整性、速度及易于转换 Linux 支持的文件系统格式 ext2,ext3,SGI,XFS,Reiserfs,FAT 网络文件系统: NFS / SMBFS 查看服务器支持哪些文件系统? [root@www ~]# ls -l /lib/modules/$(uname -r)/kernel/fs 系统目前已经加载到内存中支持的文件系统 [root@www ~]# cat /proc/filesystems 实体链接与符号链接 实体链接 ==> 硬链接 ln src dst 不能跨Filesystem 不能link目录 符号链接 ==> 号称软链接(此称呼是错误的) ln -s src dst 能跨Filesystem 能link目录 取消链接===== unlink dst 磁盘的分割、格式化、检验与挂载 想要在系统里面新增一颗硬盘时,应该有哪些动作需要做的呢? 1. 对磁盘进行分割,以建立可用的partition 2. 对该partition进行格式化(format),以建立系统可用的filesystem 3. 若想要仔细一点,则可对刚刚建立好的filesystem进行检验 4. 在Linux系统上,需要建立挂载点(亦即是目录),幵将他挂载上来 [root@www ~]# fdisk [-l] 装置名称 选项与参数: -l :输出后面接的装置所有的 partition 内容。若仅有 fdisk -l 时,则系统将会把整个系统内能够搜所到的装置的partition均列出来。 [root@www ~]# fdisk /dev/sdb ==>注意不要加上数字 Command (m for help): m <== 输入 m 后,就会看到底下这些指令介绍 d delete a partition <==删除一个partition n add a new partition <==新增一个partition p print the partition table <==在屏幕上显示分割表 q quit without saving changes <==不储存离开fdisk程序 w write table to disk and exit <==将刚刚的动作写入分割表 如果/dev/sdb是SCSI硬盘: [root@www ~]# fdisk /dev/sdb Command (m for help): n <==新增一个partition Command action e extended p primary partition (1-4) p <==第一次选p建立个主分区 Partition number (1-4): 4 <==设定为 4 号 First cylinder (1-5005, default 1): <==直接按下[enter]按键决定 Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-5005, default 5005):+512M <== 此处输入有两种: 1) 直接输入磁柱的号码,你得要自己计算磁柱/分割槽的大小才行 2) 用 +XXM 来输入分割槽的大小,让系统自己捉磁柱的号码 #+与M是必项要有的,XX为数字 Command (m for help): p Command (m for help): w [root@www ~]# partprobe <==强制让核心重新捉一次 partition table,而不需要重启机器。 磁盘格式化 1、mkfs [root@www ~]# mkfs [-t 文件系统格式] 装置文件名 选项与参数: -t :可以接文件系统格式,例如 ext3, ext2, vfat等 [root@www ~]# mkfs -t ext3 /dev/hdc6 2、mke2fs [root@www ~]# mke2fs [-b block大小] [-i block大小] [-L 标头] [-cj] 装置 选项与参数: -b :可以设定每个block的大小,目前支持 1024, 2048, 4096 bytes三种; -i :多少容量给予一个inode呢 -c :检查磁盘错误,仅下达一次-c时,会进行快速读取测试;如果下达两次-c -c的话,会测试读写(read-write),会很慢 -L :后面可以接标头名称(Label),这个label是有用的 -j :本来mke2fs是 EXT2,加上-j后,会主动加入journal而成为 EXT3 [root@www ~]# mke2fs -j -L "jinq_logical" -b 2048 -i 8192 /dev/hdc6 3、parted <===> 应用 2TB 以上的磁盘格式化,需用parted进行分割 [root@www ~]# parted [装置] [指令 [参数]] 新增分割:mkpart [primary|logical|extended] [ext3|vfat] 开始大小 结束打下 分割表 :print 删除分割:rm [partition] 范例一:以 parted 列出目前本机的分割表资料 [root@www ~]# parted /dev/sda print 范例二:建立一个约为512MB容量的逻辑分割槽 [root@www ~]# parted /dev/sdc mkpart logical ext3 1M 512M 范例三:将刚刚建立的第7号磁盘分区槽删除掉 [root@www ~]# parted /dev/hdc rm 7 磁盘检验: fsck, badblocks fsck 是用来检验文件系统是否出错 badblocks 则是用来检查硬盘戒软盘扇区有没有坏轨的指令 1、fsck [root@www ~]# fsck [-t 文件系统] [-ACay] 装置名称 选项与参数: -t :如同mkfs一样,fsck 也是个综合软件而已!因此我们同样需要指定文件系统 -A :依据/etc/fstab的内容,将需要的装置扫瞄一次 -a :自动修复检查到的有问题的扇区,所以你不用一直按y啰嗦了 -C :可以在检验的过程当中,使用一个直方图来显示目前的进度 EXT2/EXT3 的额外选项功能:(e2fsck这支指令所提供) -f :强制检查!一般来说,如果fsck没有发现任何unclean的旗标,不会主动进入细部检查的,如果您想要强制 fsck进入细部检查,就得加上-f -D :针对文件系统下的目录进行优化配置 强制检查/dev/hdc6 [root@www ~]# fsck -C -f -t ext3 /dev/hdc6 # 切记如果是已挂载的文件系统一定要先umount掉在执行fsck -a /dev/sda # 如果没有加上-f的选项,则由于这个文件系统不曾出现问题 # 检查的经过非帯快速!若加上-f强制检查,才会一项一项的显示过程 系统出现极大的问题,导致你在Linux开机的时候得进入单用户模式下进行维护的行为时,才必项使用此——指令 由于fsck在扫瞄硬盘的时候,可能会造成部分filesystem的损坏,所以『执行fsck时,被检查的partition务必不可挂载到系统上,亦即是需要在卸除的状态。 2、badblocks [root@www ~]# badblocks -[svw] 装置名称 选项与参数: -s :在屏幕上列出进度 -v :可以在屏幕上看到进度 -w :使用写入的方式来测试,建议不要使用此一参数,尤其是待检查的装置已有档案时! [root@www ~]# badblocks -sv /dev/hdc6 磁盘挂载与卸除 挂载前,你最好先确定 1、单一文件系统不应该被重复挂载在不同的挂载点(目录)中 2、单一目录不应该重复挂载多个文件系统 3、要作为挂载点的目录,理论上应该都是空目录才是 [root@www ~]# mount -a [root@www ~]# mount [-l] [root@www ~]# mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n] 装置文件名 挂载点 选项与参数: -a :依照配置文件/etc/fstab的数据将所有未挂载的磁盘都挂载上来 -l :单纯的输入mount会显示目前挂载的信息。加上-l可显示增加Label名称 -t :与mkfs的选项非帯类似的,可以加上文件系统种类来指定欲挂载的类型,常见类型:ext2, ext3, vfat, reiserfs, iso9660(光盘类型) -L :系统除了利用装置文件名(例如/dev/hdc6)之外,还可以利用文件系统的标头名称(Label)来进行挂载 -o :后面可以接一些挂载时额外加上的参数!比方说账号、密码、读写权限等: ro, rw : 挂载文件系统成为只读(ro)或可读可写(rw) async, sync : 此文件系统是否使用同步写入(sync)或异步(async)的内存机制 auto, noauto : 允许此partition被以mount -a自动挂载(auto) dev, nodev : 是否允许此partition上,可建立装置档案,dev 为可允许。 suid, nosuid : 是否允许此partition含有suid/sgid的文件格式 exec, noexec : 是否允许此partition上拥有可执行binary档案 user, nouser : 是否允许此partition让任何使用者执行mount defaults : 默认值为:rw,suid,dev,exec,auto,nouser,and async remount : 重新挂载,这在系统出错,或重新更新参数时,很有用 重点是那个『 -o remount,xx 』的选项与参数 将 / 重新挂载,幵加入参数为 rw 与 auto [root@www ~]# mount -o remount,rw,auto / 卸载已挂载文件系统 [root@www ~]# umount [-fn] 装置文件名或挂载点 选顷与参数: -f :强制卸除 -n :不更新/etc/mtab情况下卸除 ===注意:不能站在桥上拆桥=(既是不能再挂载的目录下卸载) 使用Label name进行挂载的方法 找出/dev/hdc6的label name,并用label挂载到/mnt/hdc6 [root@www ~]# dumpe2fs -h /dev/hdc6 Filesystem volume name: jinq_logical . . [root@www ~]# mount -L "jinq_logical" /mnt/hdc6 磁盘参数修订 mknod 在Linux底下所有的装置都以档案来代表,但是那个档案如何代表该装置呢?就是透过档案的major与minor数来替代的。 Major :主要装置代码 Minor :次要装置代码 [root@www ~]# ll /dev/sda* brw-r----- 1 root disk 8, 0 01-21 17:09 /dev/sda brw-r----- 1 root disk 8, 1 01-21 17:09 /dev/sda1 brw-r----- 1 root disk 8, 2 01-21 17:09 /dev/sda2 brw-r----- 1 root disk 8, 3 01-21 17:09 /dev/sda3 8,为主要装置Major 0-3,为次要装置Minor Linux :核心认识的装置数据就是透过这两个数值来决定的major与minor 磁盘文件名 Major Minor /dev/hda 3 0~63 /dev/hdb 3 64~127 /dev/sda 8 0-15 /dev/sdb 8 16-31 [root@www ~]# mknod 装置文件名 [bcp] [Major] [Minor] 选顷与参数: 装置种类: b :设定装置名称成为一个周边储存设备档案,例如硬盘等 c :设定装置名称成为一个周边输入设备档案,例如鼠标/键盘等 p :设定装置名称成为一个FIFO档案 e2label [root@www ~]# e2label 装置名称 新的Label名称 范例一:将 /dev/hdc6 的标头改成my_test并观察是否修改成功 [root@www ~]# dumpe2fs -h /dev/sda1 [root@migua ~]# e2label /dev/sda1 "my_test" [root@migua ~]# dumpe2fs -h /dev/sda1 dumpe2fs 1.39 (29-May-2006) Filesystem volume name: my_test <==已经修改 常见Linux 文件系统类型: ext3 从ext2文件系统升级到。 ReiserFS 主要的企业版都完全支持,对于小型文件具有最佳性能 XFS 针对大型文件具有最佳性能 tune2fs <=="文件系统转换" [root@www ~]# tune2fs [-jlL] 装置代号 选项与参数: -l :类似dumpe2fs -h的功能~将superblock内的数据读出来 -j :将ext2的filesystem转换为ext3的文件系统; -L :类似e2label的功能,可以修改filesystem的Label喔 开机自动挂载: [root@www ~]# cat /etc/fstab # Device Mount point filesystem parameters dump fsck /dev/sdc1 /oradata1 ext3 defaults 1 0 第一栏:磁盘装置文件名或该装置的 Label: 第二栏:挂载点(mount point): 第三栏:磁盘分区槽的文件系统: 第四栏:文件系统参数: 默认defaults即可=同时具有 rw, suid, dev, exec, auto, nouser, async 等参数 第五栏:能否被dump备份指令作用 0 代表不要做dump备份 1 代表要每天进行dump的动作。 第六栏:是否以fsck检验扇区 0 是不要检验 1 表示最早检验(开机就检测,如果挂载的硬盘很大,就需要很长的时间来检测) 2 也是要检验,但比1要晚,一般来说,根目录设定为1 ,其他的要检验的filesystem都设定为2或0就好了 创建一个大文件: 创建一个1G的file.txt 文件 [root@www ~]# dd if=/dev/zero of=/home/file.txt bs=512M count=2 内存置换空间(swap)之建置 swap 的功能就是在应付物理内存不足的情况下所造成的内存延伸记录的功能 swap 会被利用到的时刻通常就是物理内存不足的情况了
