Chinaunix首页 | 论坛 | 博客
  • 博客访问: 371146
  • 博文数量: 61
  • 博客积分: 2451
  • 博客等级: 上尉
  • 技术积分: 650
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-06 21:24
文章分类

全部博文(61)

文章存档

2012年(1)

2011年(44)

2010年(16)

分类: LINUX

2011-04-06 07:50:17

扇区为最小的物理存储单位 大小512byte

扇区组成一个圆就是一个磁柱 作为分区的最小单位

第一个扇区最重要 里面有MBR(466bytes) 和 partition  table (64 bytes)

 

linux 的档案通常包括属性(像拥有者,群组 等) 和 实际数据,文件系统通常会将这两部分不同的数据分开存放。权限属性放在inode 中 实际数据放在data block中。另外还有一个超级块区superblock 会记录整个文件系统的整体信息,包括inode 与 block 的总量 剩余量等

 

一个档案的数据可能会占用多个block 在linux中他将记录在inode中,当找到inode就可以一口气读出,而fat是没有inode存在的 他是每个block记录下一个block

image

 

image

 

磁盘碎片整理原因就是档案写入的block太过于离散,此时档案读取的效能将会变得很差,这个时候通过磁盘碎片整理将同一个档案所属的blocks 汇整在一起,这样数据读取就会比较容易了。

 

ext2 分多个区块群组:

image

data block 块的大小:

image

inode :

每个inode 大小128 bytes

每个档案占用一个inode

系统读取档案时需要先找到inode,并分析inode所记录的权限与用户是否符合,若符合才能够开始实际读取block的内容。

由于每个inode 很小只有128 bytes 而记录一个block 号码要花掉4bytes ,所以假设一个档案为400M block 为4K 至少要十万笔block号码记录 inode 就记录不下。为此我门系统将inode记录block号码区域定义为12个直接,一个间接 一个双间接与一个三间接记录区。如下图:

image

由于superblock 很重要 所以事实上除了第一个block group 内会含有superblock 后续的groupblock 不一定含有superblcok 而若含有的话则该superblock 主要是做为第一个block group 内superblock 的备份。以便当第一个superblock 死掉后可以用后面备份的进行救援。

档案系统描述

这个区段记录了每个block group 开始的block 和结束的block,还有superblock indode bitmap 和 block bitmap 在哪个blcok之间。

inode bitmap 和 block bitmap 都是用来记录那些block(inode)是可用的。那些使不可用的。当文件删除时在inode bitmap 或者在 block bitmap 中相应的blcok 和 inode 又被标识为可用。

可以通过dumpe2fs 分区 

来查看superblock blcok inode 等相关信息。

当新建一个目录时 文件系统会给目录分配一个inode 和 至少一个block,所以目录的大小一般是1K 2K 4K的整数倍。因为block的大小可能为1K 2K 4K 当目录下文件很多时就会占用多个block.

当你新建一个文件时,文件系统给你分配一个inode 和 与文件大小相当的block 数 如果4K block 100K 文件 就需要25个block 且文件名不记录在inode中而是记录在目录的block中。

在ext2 中如果文件系统出现Inconsistent 就要调用e2fsck 来检查 这样是相当费时间的,所以在ext3 中加入了日志记录的功能。所以万一文件系统发生问题,就可以检查日志记录区块,从而达到快速修复文件系统的功能。


通过命令:

ls -l /lib/modules/($uname -r)/kernel/fs

来查看linux支持的文件系统有哪些

通过:cat /proc/filesystems 查看系统已加载到内存中的文件系统


当新建一个目录时。可以看到他的连接数那栏是2 

如下:

[root@Server1 test]#ls -ld test2

drwxr-xr-x 2 root root 4096 04-09 12:26 test2

以后如果在该目录下没建一个目录都会是给目录的连接数加1 
所以给以通过该连接数来判断给目录下有几个直接子目录。
如在/root下:
[root@Server1 ~]#ls -ld /root/
drwxr-x--- 24 root root 4096 04-08 13:44 /root/
连接数是24 可以推出直接子目录是22个(包括一.开头的隐藏目录)。
验证:
[root@Server1 ~]#ls -al | grep '^d' | grep '[^.]$' | wc -l
2
------------------------------------------------------------
当你用fdisk 进行分区完后w 执行
系统会提示你下一次重启后才能使用该分区,可以通过partprobe 强制让核心捕捉一次分区表。


格式话分区:
mkfs -t ext3 /dev/sda6
系统采用默认值来进行格式话。其中比较重要的有:Label blcok的大小 还有inode 的数量。
可以通过
mke2fs -b (指定block大小) -j (格式化为ext3 默认格式化成ext2) -J size=jounal_size(指定记录日志的blcok总大小至少是blcok大小的1024倍 不能超过102400倍) -L (指定标签) 
来自定义格式化分区。

=========================================================================
当linux 文件系统发生错误时 可以用filesystem checker (fsck)来检查并修复
fsck 介绍(man fsck)check and repair the file system
-t :指定文件系统类型。
-A : 该选项会根据/etc/fstab 文件的内容对文件系统进行检查。通常是根据/etc/fstab的第六个域被称为fs passno 通常为0 是 fsck程序跳过该文件系统不予以检查,大于1的检查并根据从小到大的顺序进行检查,相同的话并行进行。通常该文件配置根的第六域为1 其余的都设为2。但如果系统内存不足的话,可以通过设置成不同的值。达到串行检查的目的。
-a :自动修复检查出的错误而不提示问题
-y :和-a 类似
-C :用直方图显示进度
-f :强制进行检查。一般如果文件系统是clean的话,不会主动进入
-D :针对文件系统的目录进行优化配置。

注意:一定要umount 再进行fsck

mount -a(挂在/etc/fstab上的文件系统) -L (利用Label挂在)  -l(列出挂在情况)
-o
ro,rw 只读,可擦写
async.sync 此文件系统是否使用同步写入(sysnc)异步写入(async)内存机制
auto,noauto 是否允许以mount -a 自动挂载
dev,nodev 是否允许在该文件系统上建立装置档案
suid,nosuid 是否允许在该文件系统上拥有suid的文件格式
exec noexec 是否允许可执行档案
user,nouser 是否允许root之外的user mount该文件系统
defaults : 默认 包括:rw suid auto nouser exec async
remount:重新挂载,在重新挂载是很有用
当你在单用户模式下根分区通常是只读的 此时这个选项就很有用
你可以通过mount -o remount,rw 以避免重新启动电脑
通过mount --bind sdir ddir 
可以将某个目录挂载到其他目录下 通过其他目录来访问该目录。
挂载镜像文件的方法:
mount -o loop [镜像文件] [挂载点]
mount -n 表示不修改/etc/mstab
mount -l 显示的应该是/etc/mstab的内容

[root@Server1 perllearn]#ls -ld /dev/sda*
brw-r----- 1 root disk 8, 0 03-31 22:36 /dev/sda
brw-r----- 1 root disk 8, 1 04-09 18:34 /dev/sda1
brw-r----- 1 root disk 8, 2 03-31 22:36 /dev/sda2
major minor 

e2label 装置名 新的label名

dumpe2fs
查看修改结果
------------------------------------------------------------------------
分区原理
  一块没有分过区的硬盘就像一张白纸一样,是没有数据的。分好区的硬盘就会具有一定的结构性。分区就是将硬盘分为一定的区域,便于使用。
  一块硬盘最多可以分四个区(主分区)。无论硬盘分多少个区,它的最前面都有一个引导扇区(主引导记录)。
  主引导记录由三部分组成:一部分是446byte的操作系统引导代码,还有一部分是64byte的主分区表。主分区表最多记录四个主分区的分区信息.每个分区占用16byte.分区就是修改分区表,它不影响硬盘上的存储的数据。最后的2字节是结束标志。
  扩展技术:需要将一块硬盘分成更多的分区,超过5个以上的分区,可以将最多四个主分区中的一个分区类型改为扩展分区,然后在扩展分区中再建逻辑分区。逻辑分区的分区信息保存在扩展分区之中,叫做扩展分区表。理论上逻辑分区没有个数的限制。扩展分区不能被直接使用,必须将其划分为若干个逻辑分区。逻辑分区的起始位置的信息都写在扩展分区表里面。逻辑分区的分区编号从5开始,如:/dev/hda5是第一块硬盘的第一个逻辑分区。


  格式化原理
  分好区的硬盘分区上面什么数据也没有,操作系统也不能读写,为了让操作系统能够识别必须向分区中预写入一定格式的数据。这个过程就称之为格式化。在Linux中称为创建文件系统。
  没有分区的硬盘是不能格式化的,没有格式化的分区是不能直接被使用的。所以分区和格式化往往都是同时进行的。

MBR位于硬盘的0磁道0柱面1扇区。
  零磁道处于硬盘上一个非常重要的位置,硬盘的主引导记录区(MBR)就在这个位置上。零磁道一旦受损,将使硬盘的主引导程序和分区表信息遭到严重破坏,从而导致硬盘无法自检。
  硬盘MBR(Main Boot Record)(硬盘主引导记录)及硬盘分区表介绍硬盘MBR就是我们经常说的“硬盘主引导记录”,简单地说,它是由FDISK等磁盘分区命令写在硬盘绝对0 扇区的一段数据,它由主引导程序、硬盘分区表及扇区结束标志字(55AA)这3个部分组成,如下:组成部分 所占字节数 内容、功能详述主引导程序区 446 负责检查硬盘分区表、寻找可引导分区并负责将可引导分区的引导扇区(DBR)装入内存;硬盘分区表区 16X4=64 每份16字节的4份硬盘分区表,里面记载了每个分区的类型、大小和分区开始、结束的位置等重要内容;结束标志字区 2 内容总为”55AA”。结束标志字区 2 内容总为”55AA”这3部分的大小加起来正好是512字节=1个扇区(硬盘每扇区固定为512个字节),因此,人们又形象地把MBR称为“硬盘主引导扇区”。这个扇区所在硬盘磁道上的其它扇区一般均空出,且这个扇区所在硬盘磁道是不属于分区范围内的,紧接着它后面的才是分区的内容(也就是说假如该盘每磁道扇区数为63,那么从绝对63扇区后面的64扇区才是分区的内容)。
  
  主引导扇区结构图
|-------------------------|
|                         |
|                         |
|        Main Boot Record         | 
|                         |
|                         |
|       主引导记录 (446字节)       |
|                         |
|                         |
|                         |
|                         |
|                         |
|-------------------------|
|        分区信息 1(16字节)        |
|-------------------------|
|        分区信息 2(16字节)        |
|-------------------------|
|        分区信息 3(16字节)        |
|-------------------------|
|          分区信息 4(16字节)         |
|-------------------------|
|        结束标志 (2字节)          |
|-------------------------| 


分区上的引导扇区
  为保险起见,每个分区(包括逻辑分区)上的第一个扇区都将被作为引导区保留。含有引导代码的分区上的引导区也是可以引导操作系统的;不含有引导代码的分区上的引导区不具有引导操作系统的功能。

dd 命令 的参数 和使用
以下是dd命令的参数,
if=file
输入文件名,缺省为标准输入。
of=file
输出文件名,缺省为标准输出。
ibs=bytes
一次读入 bytes 个字节(即一个块大小为 bytes 个字节)。
obs=bytes
一次写 bytes 个字节(即一个块大小为 bytes 个字节)。
bs=bytes
同时设置读写块的大小为 bytes ,可代替 ibs 和 obs 。
cbs=bytes
一次转换 bytes 个字节,即转换缓冲区大小。
skip=blocks
从输入文件开头跳过 blocks 个块后再开始复制。
这里块是指bs指定的大小 或者是ibs的大小
seek=blocks
从输出文件开头跳过 blocks 个块后再开始复制。(通常只有当输出文件是磁盘或磁带时才有效)
count=blocks
仅拷贝 blocks 个块,块大小等于 ibs 指定的字节数。

备份MBR 
dd if=/dev/sda of=/root/mbr bs=512 count=1
恢复MBR
dd if=/root/mbr of=/dev/sda bs=512 count=1
恢复分区表:
dd if=/root/mbr of=/dev/sda bs=1 skip=446 seek=446 count=66
只备份和恢复主分区表 并不能包括逻辑分区表
参看:
备份恢复分区表:
sfdisk -d /dev/sda >partition_table
sfdisk -d /dev/sda

copy 光盘镜像
放入光盘 自动挂载的话 先卸载
然后:
dd if=/dev/cdrom of=centos.iso bs=16M 
备份磁盘分区
dd if=/dev/sda1 of=/tmp/disk.back bs=12M 
备份出来的文件可以用mount进行挂载使用:
mount -o loop /tmp/disk.back /mnt

可以用dd命令copy整个硬盘 这个硬盘与原来硬盘一摸一样
dd if=/dev/sda of=/dec/sdb bs=100M
可以看下面这个帖子;

touch 与 dd 创建一个文件的区别:
touch只能新建一个空文件。这个文件的数据区大小是0(元数据那4K不算),你无法用来做配额测试。
dd的话是实打实的创建一个文件并往里面填数据。这样才能得到一个有实际大小的文件来测试。

建立大型档案以制作loop装置档案
dd if=/dev/zero of=/tmp/loopdev bs=1M count=512
创建一个512M的文件
格式化:
mkfs -t ext2 /tmp/loopdev
mount -o loop /tmp/loopdev 使用

-------------------------------------------------
建立swap 
fdisk /dev/sda
n
增加一个分区/dev/sda6
t 将system id 改成82 即linux swap
partprone (让核心检测到partition table)
如果在执行这个命令时出现如下的错误提示时:
 end_request: I/O error dev fd0, sector 0
不要担心,提示找不到软盘 因为系统本来没有软盘,所以这个错误可以忽略
然后用mkswap /dev/sda6
然后再free 查看
swapon /dev/sda6 启用swap 
swapon -s 查看
swapoff 禁用

也可以从file 建立一个swap 
dd if=/dec/zero of=/tmp/swap bs=1M count=128
mkswap /tmp/swap
swapon /tmp/swap

如果要对大于2TB的硬盘进行分区的话 fdisk 就不能用了,只能使用parted ,不过这个工具会使所做的修改立即生效。所以慎用。
O(∩_∩)O~

阅读(2430) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~