Linux的磁盘管理
(很重要请注意高能预警)
硬盘:几个盘片,双面,磁性颗粒,
处理速率不同步:借助于一个中间层
文件系统(FileSystem) 
    可以实现对磁盘行的文件进行读写     
    文件系统其实就是一个特殊软件,是直接安装到硬盘上的
硬盘分类     
    机械硬盘:     
        盘片组,磁头,磁头臂     
        马达、空气过滤片     
    固态硬盘     
        类似与内存的结构
   
机械硬盘简介     
    磁道(Track):磁盘旋转时候的同心圆,磁道编号从外向内,从0开始编号。     
    扇区(Sector):将每个磁道分割成等大小的空间,每个扇区大小都是512字节     
    柱面(Cylinder):不同盘片的相同扇区。磁盘分区的时候,是以柱面为单位进行分区的。
寻道时间:    
    移动磁道到目标磁道     
    旋转磁盘     
    
PS:外侧磁道的读写性能,优于内侧磁道,所以系统一般安装在C盘 (C盘靠外)    
  
保存分区信息     
    0号扇区:MBR:Master(main) Boot Record,主引导记录,512字节     
    第一部分:前446字节,存放程序bootloader,作用完成系统的开机启动     
    第二部分:中间64字节,Disk Patration Table,磁盘分区表,作用是记录磁盘分区     
        16字节标识一个分区,64字节可标识4个分区     
    第三部分:最后的2字节,Magic Number,标记当前MBR是否生效
   
分区类型      
    主分区     
    扩展分区
分区结构     
    全部都是主分区:1、2、3、4主     
    主+扩展分区:1主+1扩展  2主+1扩展 3主+1扩展     
        扩展分区只能有一个     
        扩展分区必须制作成逻辑分区才能使用     
        逻辑分区可以有无限多个
设备文件     
    linux 一切皆为文件 
    设备文件:物理设备在系统中的映射  
            块设备文件 :支持随机读写的设备,硬盘     
            字符设备文件 :支持线性读写,键盘  
    设备文件的默认位置: /dev  
    设备文件的设备号 :    
    主设备号(major number):标识设备类型(相同类型的设备,主设备号相同)     
    次设备好(ninor number):标识相同类型的不同设备     
        
接口     
    IDE:并行的传输接口     
    SATA:串行的传输接口 (串行的速度快于并行)    
    SCSI:并行接口,企业使用,Small Computer System Interface     
    SAS:串行接口,性能好(串行的SCSI)     
    USB接口:    
        usb1.0     
        usb2.0     
        usb3.0
CentOS 6.x硬盘识别    
    /dev/sd#     
        #=12345...     
    /dev/sda1     
    /dev/sda2
Centos 5.x    
    IDE     
        /dev/hdx     
    SATA     
        /dev/sdx     
    
接口都是控制芯片      
    网卡适配器 :独立核心功能是转换数据格式    
    usb控制器  :集成的    
linux的磁盘对应的设备文件的命名     
    磁盘对应的设备文件依次/dev/sda sdb sdc .....     
    磁盘分区对应的设备文件     
        第一个主分区:/dev/sd#1     
        第二个主分区:/dev/sd#2     
        第三个主分区:/dev/sd#3     
        第四个主分区:/dev/sd#4     
        扩展分区     
        第一个逻辑分区:/dev/sd#5     
        【逻辑分区的编号是从5开始的】
   
fdisk命令     
    作用:查看或者修改磁盘的分区     
    格式:fdisk [选项] [设备文件]     
    选项:     
        -l:列举系统中的全部磁盘以及磁盘分区     
            (centos6中,默认将逻辑卷也识别为一个磁盘)
    例子:只查看物理磁盘的分区    
    fdisk -l /dev/sd[a-z]     
    
    例子:只查看sda分区     
    fdisk -l /dev/sda
    
    
fdisk -l返回结果解析
Disk /dev/sda: 42.9 GB, 42949672960 bytes    
设备文件名称  空间      空间     
255 heads,  63 sectors/track,     5221 cylinders     
虚拟磁头数  平均每磁道上的扇区数  柱面数     
Units = cylinders of 16065 * 512 = 8225280 bytes     
每个存储单元的大小     
Sector size (logical/physical): 512 bytes / 512 bytes     
I/O size (minimum/optimal): 512 bytes / 512 bytes     
Disk identifier: 0x0008cfb6     
磁盘标识符【在磁盘数量多的情况下,非常有用】
   Device       Boot          Start      End      Blocks     Id        System    
/dev/sda1       *             1          64       512000     83        Linux     
分区的设备文件  标识系统分区  起始柱面   结束柱面 磁盘块大小 分区类型  系统类型     
/dev/sda2                     64         5222     41430016   8e        Linux LVM
   
注意:直接输fdisk+磁盘,如果不使用任何选项,那么就是对磁盘进行分区操作
分区操作实例     
fdisk /dev/sdc
分区操作命令 (标示注释的是能用的到的)   
   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                        打印帮助     
   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         修改分区类型id     
   u:change display/entry units     
   v:verify the partition table     
   w:write table to disk and exit           保存修改     
   x:extra functionality (experts only)
主+扩展<=4   
分区以后的磁盘,需要安装文件系统才能使用
为什么分区?    
    方便检索磁盘上的文件     
    不是必须分区。   
注意:如果一个磁盘已经分区并且在使用,那么在对磁盘进行分区操作可能会出现系统无法识别该分区,此时需要让内核重新读取MBR中的分区表。系统识别的分区信息记录在/proc/partitions文件中,partx命令和kpartx命令可以让内核重新读取分区信息。例如#partx –a /dev/sdb
分区必须安装软件才能实现文件的读写操作    
    --文件系统
常见文件系统    
    NTFS     
    FAT32     
    EXT系列
vfs:Virtual File System 虚拟文件系统     
    作用:将底层的各种各样的文件系统抽象成一个同一个文件系统,这样可以极大的简化上层应用在使用文件系统时候的复杂度。     
    
    
linux文件系统详解     
一、基本文件系统     
1、ext系列文件系统     
    ext2 ext3 ext4     
    centos6 默认使用ext4     
2、Reiserfs     
    处理和保存小文件的处理非常优秀     
3、xfs     
    对大文件处理性能非常好。     
    文件大小无上限。     
4、JFS,日志文件系统     
    IBM所开发     
5、vfat,其实就是windows下的fat32     
6、NTFS,linux到目前为止,对NTFS支持不好     
   (如果必须使用NTFS,那么建议只用NTFS来读数据,不要执行写操作)
二、集群文件系统     
1、GFS2:Global File System 2 (全局文件文件系统)    
    由redhat所研发     
2、OCFS2:Oracle Cluster File System 2  
    由Oracle所研发
三、网络文件系统      
1、NFS:     
2、smbfs     
3、windows磁盘映射  
四、光盘文件系统     
1、iso9660
五、分布式文件系统     
略
PS:磁盘分区也是文件,要使用磁盘分区需要将磁盘挂载到系统的一个目录中,这个目录就是该分区的访问入口。
   
mke2fs命令 (make ext2 file system)     
    作用:安装ex2文件系统     
    格式:mke2fs [选项] 分区设备文件     
    选项:-t ext3或ext4
【linux中一切皆文件,磁盘分区也是文件,要使用磁盘分区,需要将磁盘挂载到系统的一个目录中,这样,这个目录就是该分区的访问入口】  
    
    
PS:有的时候做实验对磁盘进行重复的格式化-挂载的时候,可能出现报错信息,包括挂载的时候提示已经挂载了,格式化的时候提示is apparently in use by the system; will not make a filesystem here!,具体错误信息如下     
[root@localhost /]# mount /dev/sda1 /media/     
mount: /dev/sda1 already mounted or /media/ busy 
[root@localhost /]# mke2fs -t ext4 /dev/sda1    
mke2fs 1.41.12 (17-May-2010)     
/dev/sda1 is apparently in use by the system; will not make a filesystem here!
可以尝试使用dmset    
    dmsetup  manages  logical  devices  that use the device-mapper driver.  Devices are created by loading a table that specifies a target for each sector (512 bytes) in the logical device.
   
    具体解决步骤如下     
    #首先检查dm中记录信息     
    [root@localhost /]# dmsetup status     
    VolGroup-lv_swap: 0 4063232 linear     
    VolGroup-lv_root: 0 36847616 linear     
    sda3: 0 1044225 linear     
    sda1: 0 2120517 linear     
    #移除sda1和3     
    [root@localhost /]# dmsetup remove sda1     
    [root@localhost /]# dmsetup remove sda3     
     
    #此时的系统就一切正常了     
    [root@localhost /]# mke2fs -t ext4 /dev/sda1
   
ext系列文件系统的(物理)构成    
block:磁盘块,磁盘存储数据的最小单元(默认4kb)     
block bitmap:块位图,作用是实现快速检索出空闲的磁盘块     
inode list:inode 列表,这是存放inode 的空间     
inode:index inode,索引节点,索引节点其实也是一个小的磁盘空间,一个inode用来存放一个文件,在inode中存放内包括(大小、属主属组、时间戳、连接数、文件所在的磁盘快的编号),但是在inode中,没有文件名。     
inode bitmap:inode位图,快速从inode列表中找出一个空闲的inode
   
磁盘块是用来存储文件中的数据的     
    一般文件:磁盘块上所存储的就是文件中的内容     
    目录:所存放的是该目录下文件名称列表  
打开文件(找到文件)    以打开cat /var/log/message 为例     
    1、找到根(根是自引用)     
    2、从根所在的磁盘块表中,找出var所在的inode编号     
    3、根据var所在的inode编号,就可以找到var所在的磁盘块     
    4、因为var是目录,所以var所在的磁盘块中存放的是一张表,在表中记录了log所在的inode     
    5、根据log的inode编号,可以找到log目录所在的磁盘块     
    6、从log的磁盘块的表中可以找到message文件所在的inode编号     
    7、从message的inode中,可以找到该文件的磁盘块,最终读取出文件
新建文件    以在/etc/下新建文件zx.txt,大小是10K,为例     
    1、扫描inode bitmap,检索出一个空闲的inode 。假设找出的1号inode     
    2、找出目录etc所在的磁盘块,在该磁盘块的表中添加一个条目,内容是 zx.txt-->1     
        【到此为止,就可以在磁盘上看到该文件,但是文件无法打开】     
    3、扫描block bitmap,找出3个空闲磁盘块,然后就可以向磁盘块中写入数据。
   
ext系列文件文件系统的重要特性     
    在向磁盘写入文件的时候,会提前锁定一个连续的空间     
    如果后期发现空间不够,那么再锁定一个连续空间     
    如果发现空间有剩余,那么释放剩余部分     
    【避免磁盘碎片产生】    
   
删除文件     以在/etc/zx.txt为例     
    1、找到etc目录所在的磁盘,将表中的索引删除     
        【此时从磁盘上,就看不到该文件了】     
    2、将1号inode对应的inode bitmap置为零     
    3、将zx.txt所占用的磁盘块对应的block bitmap置为0
复制文件   以在/etc/zx.txt复制到home下为例     
    1、先找出一个空闲inode (假设是6)     
    2、找到home所在的磁盘块,在磁盘块的表中添加一个记录 zx.txt -->6     
    3、找出空闲磁盘块     
    4、将原文件磁盘块上的数据依次复制到新找出的磁盘块上
剪切文件  以在/etc/zx.txt剪切到home下为例     
    1、找到etc所在的磁盘块,将磁盘块的表中的zx.txt的索引记录剪切下来     
    2、找到home所在的磁盘块,在磁盘块的表中粘贴前面所剪切的索引记录
   
块组(Block Group)     
    每个块组中,有独立的inode,位图
超级块(super block)    
    记录包括     
    1、块组的数量     
    2、各个块中的磁盘数量、空闲数量、使用数量     
    3、各个块组中的inode数量,空闲数量,使用数量
块组描述表(GDT)    
    记录各个块组的范围
BOOT BLOCK    
    引导块     
    安装双系统的时候,第二个系统的引导程序安装在bootblock中
PS:下面画个图说明下。。。不过画的有点难看。。。将就看吧
 
    
ext系列     
    ext2     
        可以自动检测出不完整的文件并删除,但是速度非常慢    
    ext3:日志文件系统(journal File System)     
        在磁盘上创建一个日志空间,在创建文件的时候,先将文件的名称写入到日志空间,如果文件正常写入成功,那么从日志空间删除文件名称。     
        如果在写入过程发生宕机等故障,那么文件名会保留在日志空间中,下次启动的时候,系统会扫描日志空间,将日志空间中的文件删除。
   
    
[root@node2 ~]# mke2fs /dev/sdc1     
mke2fs 1.41.12 (17-May-2010)     
Filesystem label=    标签(卷标)                    *     
OS type: Linux       操作系统类型     
Block size=4096 (log=2)   磁盘块的大小,默认是4K     **     
Fragment size=4096 (log=2)  偏移大小              
Stride=0 blocks, Stripe width=0 blocks     
197600 inodes, 789185 blocks    inode和磁盘块的总量   **     
39459 blocks (5.00%) reserved for the super user   给管理员用户预留的磁盘空间大小    ***     
First data block=0       起始磁盘块编号   
Maximum filesystem blocks=809500672  
25 block groups     
32768 blocks per group, 32768 fragments per group     
7904 inodes per group    
Superblock backups stored on blocks:    超级块的备份所在的磁盘块编号     ***     
    32768, 98304, 163840, 229376, 294912
Writing inode tables: done       done表示inode表写入成功写入成功                        
Writing superblocks and filesystem accounting information: done  
This filesystem will be automatically checked every 35 mounts or    
180 days, whichever comes first.  Use tune2fs -c or -i to override.    
    
    
注意:如果是创建ext3文件系统,会多一个信息    
Creating journal (16384 blocks): done     
    表示创建日志空间成功     
    
    
    
    
创建文件系统命令     
mke2fs命令     
    作用:是创建文件系统     
    配置文件:/etc/mke2fs.conf (用来控制默认参数)     
    格式:mke2fs [options] /dev/sd#n     
    选项:     
        -t {ext2|ext3|ext4}:指定新建的文件系统类型     
        -j:同 -t ext3,作用创建ext3 文件系统     
        -L ###:指定分区的卷标     
        -b {1024|2048|4096}:设定磁盘块大小     
        -g #:指定每个块组多少个磁盘块     
        -G #:块组的总数     
        -i bytes-per-inode:指定inode和字节的比例,默认是16384字节对应一个磁盘块     
        -I inode-size:     
        -U UUID:指定一个文件系统的UUID。  (通常用在磁盘数量较多的情况)     
        -N number-of-inodes:指定文件系统中的inode总数     
        -m #:指定保留空间的大小  
         
e2label命令     
    作用:查看、修改卷标     
    格式:e2label device [newlabel]
例子:    
    [root@node2 ~]# e2label /dev/sdc1 myGame     <<<<<< 修改卷标     
    [root@node2 ~]# e2label /dev/sdc1            <<<<<< 查看卷标     
    myGame
    
    
blkid命令     
    作用:查看磁盘的id信息和文件系统类型     
    格式:blikd DEVICE     
    
    
    [root@node2 ~]# blkid /dev/sdc1     
    /dev/sdc1: LABEL="myGame" UUID="129c8699-9809-4e15-98a1-d232e87fceca" SEC_TYPE="ext2" 【TYPE="ext3"】     
    设备文件   卷标            唯一标识                                    安全类型        文件系统类型
   
dumpe2fs命令     
    作用:显示文件系统的分区信息     
    选项:     
        -h:显示超级块信息
    [root@node2 ~]# dumpe2fs -h /dev/sdc1    
    dumpe2fs 1.41.12 (17-May-2010)     
    Filesystem volume name:   myGame                         卷标名称     
    Last mounted on:          <not available>                 最近一次的挂载点     
    Filesystem UUID:          129c8699-9809-4e15-98a1-d232e87fceca     
    Filesystem magic number:  0xEF53     
    Filesystem revision #:    1 (dynamic)                ???????????????     
    Filesystem features:      has_journal ext_attr resize_inode dir_index filetype sparse_super large_file     
    Filesystem flags:         signed_directory_hash     
    Default mount options:    (none)     
    Filesystem state:         clean                    文件系统的状态     
    Errors behavior:          Continue     
    Filesystem OS type:       Linux     
    Inode count:              197600                     【这部分内容平时就应该经常关注的】     
    Block count:              789185     
    Reserved block count:     39459     
    Free blocks:              759214     
    Free inodes:              197589     
    First block:              0     
    Block size:               4096     
    Fragment size:            4096     
    Reserved GDT blocks:      192     
    Blocks per group:         32768     
    Fragments per group:      32768     
    Inodes per group:         7904     
    Inode blocks per group:   494     
    Filesystem created:       Wed Mar 16 16:40:22 2016     
    Last mount time:          n/a     
    Last write time:          Wed Mar 16 17:10:07 2016     
    Mount count:              0     
    Maximum mount count:      21     
    Last checked:             Wed Mar 16 16:40:22 2016     上一次检查文件系统时间     
    Check interval:           15552000 (6 months)     
    Next check after:         Mon Sep 12 16:40:22 2016     
    Reserved blocks uid:      0 (user root)     
    Reserved blocks gid:      0 (group root)     
    First inode:              11     
    Inode size:              256     
    Required extra isize:     28     
    Desired extra isize:      28     
    Journal inode:            8     
    Default directory hash:   half_md4     
    Directory Hash Seed:      93c9bb64-26f5-48b2-b338-454f3474327f     
    Journal backup:           inode blocks     
    Journal features:         (none)     
    Journal size:             64M     
    Journal length:           16384     
    Journal sequence:         0x00000001     
    Journal start:            0
注意:以上内容,必须能够大部分可以读懂
   
tune2fs命令     
    作用:查看、修改文件系统的属性     
    可修改:     
        预留空间、卷标     
    不可修改:     
        磁盘块     
    选项:     
        -l:查看超级块信息,类似于 dumpe2fs -h     
        -L ###:修改分区的卷标,类似于 e2label DEVICE [newLabel]     
        -m #:修改文件系统的保留空间百分比     
        -j:将ext2文件系统升级为ext3。(内部数据不受影响)     
    
fsck命令     
    作用:检查、修复文件系统的命令     
    选项:     
        -t fstype DEVICE: 检查指定的文件系统     
        -a:自动修复文件系统     
        -r:交互式修复
e2fsck命令    
    作用:修改文件系统     
    选项:     
        -y:检查过程中,如果需要用户输入Y,则自动输入。     
        -f:强制执行检查操作  
           
虚拟内存        
    每个程序都使用一个独立的虚拟机内存空间,这个内存空间是物理内存的映射     
    x86架构的主机中,每个程序都认为自己独享4G的内存空间,并且认为当前主机中,只有自己一个程序。
   
交换分区(swap)     
    在windows中称为虚拟内存     
    指的是在硬盘上规划处一个组成方式类似于内存的空间,当内存空间不足时,将内存中闲置数据暂时移动到交换分钟     
    实现的效果就是可以实现内存的过载使用。     
    
注意:     
    尽量不要使用swap     
    如果发现swap使用频繁,那么就说明需要添加内存了  
   
free命令     
    作用:显示当前内存的使用情况     
    格式:free [options]     
    选项:     
        -m:以MB为单位显示     
        -g:以GB为单位显示     
    
[root@node2 ~]# free -m     
             total       used       free     shared    buffers     cached     
Mem:          1869        290       1578          0         50         92     
-/+ buffers/cache:        146       1722      <<<<<<真实内存空间的使用和空闲情况     
Swap:         1983          0       1983     
    
    
缓冲:存放元数据,inode中的数据     
缓存: 存放数据
注意:只有缓存和缓冲中的数据可以清空,其他数据不能清空
   
伪文件相关     
    /proc/partitions:记录系统中的分区信息     
    /proc/meminfo:内存的使用情况     
    /proc/cpuinfo:记录系统中的CPU的详细信息
dd命令    
    作用:从底层逐字节复制文件。     
    格式:dd if=原文件 of=目的文件 [bs=xK|M|G count=n]
   
    例子:将/etc/passwd复制到home下叫做a.txt     
    dd if=/etc/passwd of=/home/a.txt     
    
    例子:将/etc/passwd的前10K的内容复制到home下     
    dd if=/etc/passwd of=/home/a.txt bs=1K count=10     
    dd if=/etc/passwd of=/home/a.txt bs=10K count=1     
    
    例子:备份sda的MBR     
    dd if=/dev/sda of=/home/mbr.bak bs=512 count=1     
    
    例子:实现硬盘对考(将sda上的数据全部复制到sdb上)     
    dd if=/dev/sda of=/dev/sdb
新建交换分区的流程     
一、新建一个分区     
    分区格式id必须是 82     
    
二、安装swap文件系统     
    # mkswap -f /dev/sdc2
   
mkswap命令     
    作用:创建swap文件系统     
    格式:swap [-f -L 卷标] DEVICE     
    
三、激活swap分区     
    # swapon /dev/sdc2     
    
swapon命令    
    作用:激活交换分区     
swapoff命令     
    作用:关闭交换分区
特殊场景:磁盘无剩余空间(无法再分区),但是分区中还有大量剩余空间,此情况下新建交换分区,可以用 【磁盘镜像文件】 来实现
磁盘镜像文件:就是用一个文件,来模拟当中磁盘来使用。    
    
    
一、如何创建镜像文件     
1、dd命令     
2、特殊设备文件     
    /dev/zero--泡泡机     
    
案例:在tmp下创建一个1G的文件disk.img    
    # dd if=/dev/zero of=/tmp/disk.img bs=1M count=1024     
    
二、将新建的镜像文件当做磁盘来创建交换分区     
1、创建文件系统     
# mkswap -f /tmp/disk.img     
2、激活     
# swapon /tmp/disk.img     
    
    
    
/etc/fstab详解    
作用:实现开机自动挂载外部设备或者自动激活交换分区     
    
注释     
[root@node2 ~]# cat /etc/fstab     
/dev/mapper/vg_zxf-lv_root          /                       ext4            defaults        1 1     
UUID=265f1a54-7f15-46               /boot                   ext4            defaults        1 2     
/dev/mapper/vg_zxf-lv_swap          swap                    swap            defaults        0 0     
tmpfs                               /dev/shm                tmpfs           defaults        0 0
设备文件名称                        挂载点                  文件系统类型    挂载选项        转储频率   检查次序    
/dev/sdc1                            /mnt                    ext3            defaults        0 0     
    
注意:交换分区的自动激活稍有特殊
交换分区到底多大?    
    物理内存2-4G,swap4G     
    物理内存<2G,swap=物理内存*2     
    物理内存>8G,swap=4G
   
mount命令     
    作用:挂载外部设备到linux系统     
    格式:mount [options] [-t fstype] [-o option] 设备名称 挂载点
   
用法1:直接执行mount,可以查看当前已经挂载的全部设备
    options    
        -a:重读/etc/fstab,将其中的全部内容重新挂载     
        -L label:以卷标的方式进行挂载     
        -U UUID:以UUDI的方式进行挂载     
        -n:在挂载外部设备的时候,不将挂载信息写入/etc/mtab中     
        -t fstype:在挂载设备时候,必须指定文件系统类型。     
            (在指定muont命令时候,会自动调用blkid来获取文件系统类型)     
        -r:只读     
        -rw:读写     
    
    -o options     
        sync:同步写入     
            优点:安全     
            缺点:导致系统性能变差     
        async:异步写入     
            优点:性能好     
            缺点:容易丢失数据     
        atime:自动更新时间戳     
        noatime:不自动更新时间戳     
        diratime:     
        nodiratime:对目录而言,不自动更新访问时间戳     
        defaults:     
        exec:     
        noexec:禁止分区中的可执行程序自动运行     
        owner:允许普通用户挂载该文件系统      【通常不能使用此选项】    
        remount:重新挂载分区,在进行重新挂载的时候,可以指定额外的选项     
            remount,rw  重新挂载可读写     
            remount,rw,async,noatime,........     
        ro:只读文件系统     
        rw:读写文件系统     
        acl:启动acl功能     
        
挂载命令:mount    
卸载命令:umount
fuser命令    
    作用:查看指定的目录被哪个进程或者用户所使用     
    格式:fuser [选项] 目录     
    选项:     
        -v:显示目录正被哪个进程所使用     
        -k:杀死正在访问某个文件进程/用户     
            如果是对挂载点进行操作,需要结合-m     
        -m:是专用于挂载点的选项
df命令    
    作用:检查分区的使用情况     
    格式:df [-h]
PS:ls –ldh /mnt查看目录所在的磁盘块中的数据大小(不能看目录大小)    
du命令     
    作用:查看目录的大小     
    选项:     
        -h:     
        -s:仅仅显示目标的大小     
    组合:     
        du -sh DIR     
    
tree命令     
    作用:显示目录以及子目录名称     
    选项:     
        -L n:显示N级目录  
    
链接     
    硬链接:     
        两个inode指向相同的磁盘块     
        特点:     
            硬链接和原始文件互为备份(修改一个文件,另一个随着改变)     
            删除原始文件,链接文件可以正常使用     
            【其实硬链接和原始文件就是同一个文件】     
            每做一个硬链接,连接数加1     
    软链接     
        【同windows中的快捷方式】     
        给原始文件创建一个快捷方式     
        特点:     
            软链接中,存放的是指向原始文件的路径     
            软链接闪烁表示链接文件被损坏     
            原始文件被删除,软连接文件无法访问     
            软链接文件的权限是777,用户真正的权限要参考原始文件     
        
注意:    
    硬链接:     
        只能对文件创建,不能对目录创建     
        目录的连接数默认是2     
        硬链接不能跨文件系统     
    软链接:     
        可作用于目录     
        可以跨分区     
        大小是所指向的原始文件的路径的字符个数
   
linux文件压缩     
1、gzip命令     
    后缀:.gz     
    格式:gzip file1 file2 ....     
    选项:     
        -d:解压缩     
        -#:指定压缩比,1-9     
            gzip -7 passwd     
        -c:将压缩结果输出到标准输出(通常用来保留原始文件)     
        
        例子:压缩passwd,要求保留原始文件     
        # gzip -c passwd > passwd.gz
    解压缩    
    gunzip命令   
    zcat命令在不解压的情况下,查看压缩包中的内容  
 
2、bzip2命令    
    后缀:.bz2     
    格式: 同上    
    选项:     
        -d:解压缩     
        -#:指定压缩比,1-9     
            gzip -7 passwd     
        -k:保留原始文件
    解压缩    
    bunzip2    
    bzcat在不解压的情况下,查看压缩包中的内容  
   
3、xz命令     
    后缀:xz     
    格式:同上     
    选项:     
        -d:解压缩     
        -#:指定压缩比,1-9     
            gzip -7 passwd     
        -k:保留原始文件        
    解压    
    unxz  
注意:以上三个,只能压缩文件,不能压缩目录            
4、zip命令    
    后缀:.zip     
    特点:压缩比低,但是可以压缩目录,而且压缩不删除原文件     
    【zip压缩文件,在windows和linux都支持】     
    格式:zip [选项] xxx.zip file1 file2 .......     
    选项:     
        -r:递归,压缩目录以及子目录中的全部文件。【压缩目录时候,通常要使用】
    解压命令    
    unzip
compress:压缩    
decompress:解压缩     
uncompress: 解压缩     
archive:归档     
    将多个文件或目录合并成一个文件,文件大小不变或稍微变大。
归档的命令tar    
    后缀:.tar     
    格式:tar  [选项]  -f xxxx.tar  file1 file2......     
    选项:     
        -f xxxx.tar:指定归档文件的文件名     
        -c:创建归档     
        -x:展开归档     
        --xattrs:在创建归档的时候保留文件的扩展属性等。     
        -t:在不展开归档的情况下,查看其中的内容     
        -p:在创建归档的时候保留文件的权限和属性不变     
        --exclude=FILE:在创建归档的时候不对某个文件进行归档     
        -j:调用bzip2进行压缩和解压缩     
        -z:调用gzip进行压缩和解压缩     
        -J:调用xz进行压缩和解压缩     
        -v:显示过程信息     
        -C
    例子:对home目录创建归档,归档文件名是a.tar    
    # tar -cf a.tar /home     
    
    例子:展开归档     
    # tar -xf a.tar     
    
    
    例子:将a.tar使用gzip进行压缩     
    # gzip -c a.tar > a.tar.gz     
    
    例子:将a.tar使用xz进行压缩     
    # xz -k a.tar     
    
    例子:将a.tar.gz解压缩并展开归档     
    # gzip -d a.tar.gz  ==>a.tar     
    # tar -xf a.tar     ==>a     
    
    例子:将etc init.d home归档压缩成all.tar.gz     
    # tar -zcvf all.tar.gz  etc/ init.d/  home/     
    
    例子:将etc init.d home归档压缩成all.tar.bz2     
    # tar -jcvf all.tar.bz2 etc/  init.d/  home/  
     
    注意:在创建或者展开归档的时候,可以不指定压缩方式     
        如果不指定,那么系统自动根据文件后缀来选择压缩或解压缩方式     
    
    例子:将all.tar.gz展开     
    # tar -zxvf all.tar.gz     
    也可以     
    # tar -xvf all.tar.gz   
   PS:在创建或展开压缩的时候,不建议指定方式,让系统自己选择。     
ln命令     
    作用:创建软\硬链接     
    格式:ln [-s] 原始文件 目的文件     
    选项:     
        -s:创建软链接     
    
RAID整列     
    Redundant Ayyays of Inexpensive Disk 廉价冗余磁盘阵列     
    Redundant Ayyays of Independent Disk 独立冗余磁盘阵列     
    
RAID     
    将多个物理磁盘组合成逻辑磁盘提供给用户,并提升整体读写性能。  
  
RAID级别       
(级别仅仅表示磁盘的组织方式不同)     
0:条带     
    读写提升:读、写     
    冗余能力:无     
    磁盘数量:>=2     
    磁盘使用率:100%
1:镜像    
    读写提升:无     
    冗余能力:有     
    磁盘数量:>=2     
    磁盘使用率:50%     
    
3:校验码     
    读写提升:读、写     
    冗余能力:有     
    最多损坏磁盘:1个     
    磁盘数量:>=3     
    磁盘使用率:(n-1)/n     
    【使用固定的磁盘存放校验码】     
    
5:校验码     
    读写提升:读、写     
    冗余能力:有     
    最多损坏磁盘:1个     
    磁盘数量:>=3     
    磁盘使用率:(n-1)/n        
    【多个磁盘轮流存放校验码】     
    
10:    
    读写提升:读、写     
    冗余能力:有     
    磁盘数量:>=4     
    磁盘使用率:50%        
01:    
    读写提升:读、写     
    冗余能力:有     
    磁盘数量:>=4     
    磁盘使用率:50%    
50:    
    读写提升:读、写     
    冗余能力:有     
    磁盘数量:>=6     
    磁盘使用率:(n-2)/n        
   
jobd    
    读写提升:无     
    冗余能力:无     
    磁盘数量:不限制     
    磁盘使用率:100%     
    【通过jobd可以将多个物理磁盘的空间整合成一个逻辑磁盘】     
    
    
RAID的实现    
    硬RAID     
        集成     
        独立     
    软RAID     
        使用CPU模拟生成一个RAID控制器     
        会导致CPU更为繁忙     
        要借助于MD模块     
    
md模块     
    multi disk     
    作用:将多个物理磁盘整合成逻辑磁盘
命令实现    
    mdadm     
    特点:模式化的命令
1、创建模式    
    作用:创建阵列     
    选项: -C     
    模式中的子选项:     
        -l #:指定阵列的级别     
        -n #:指定创建阵列所使用的磁盘数量     
        -a {yes|no}:yes,表示自动创建需要的设备文件     
        【阵列的设备文件是/dev/md#】     
        -c #:指定所切割的数据块的大小,默认是512K,修改必须是512的整数倍     
        【chunk】     
        -x #:指定空闲(保留)磁盘的个数
2、管理模式    
    操作     
        添加:--add -a     
        删除:--del -d
3、监控模式    
    选项:-F
4、增长模式    
    选项:-G     
    
5、装配模式     
    选项:-A     
    
【如果不指定,那么默认就是管理模式】  
     
案例1:创建一个2G的raid0     
    【既可以使用磁盘,也可以用分区来实现,此案例用分区实现】     
    
1、创建两个1G的分区     
    注意:     
        1、分区类型必须修改为fd     
        2、不能在分区上安装文件系统     
    
2、创建raid0    
    格式:mkadm -C /dev/DeviceName -a yes -l LEVEL -n 磁盘数量 磁盘1 磁盘2 ....     
    # mdadm -c /dev/md0 -a yes -l 0 -n 2 /dev/sdc{1,2}
3、查看当前系统中的raid信息    
    # cat /proc/mdstat
4、在raid0上安装文件系统    
    # mke2fs /dev/md0
5、挂载    
    # mkdir /myraid0     
    # mount /dev/md0 /myraid0
   
    
案例2:删除raid0     
1、查看raid0的基本信息    
    [root@test mkraid0]# cat /proc/mdstat     
    Personalities : [raid0]     
    md0 : active raid0 sdc2[1] sdc1[0]     
          2119680 blocks super 1.2 512k chunks     
    
2、卸载此raid0     
    # umount /dev/md0
3、停止此RAID0    
    # mdadm -S /dev/md0
4、清除此raid的超级块中的数据    
    # mdadm --zero-superblock /dev/sdc1 /dev/sdc2
   
案例3:创建一个10G的raid1     
    【使用物理磁盘来实现,每个物理磁盘大小是10G】     
1、使用sdb和sdc创建raid1     
    # mdadm -C /dev/md9 -a yes -l 1 -n 2 /dev/sdc /dev/sdb     
    【软raid不能当做启动分区来使用】     
    
2、检查raid1的同步情况     
    # cat /proc/mdstat     
    
3、检查raid的详细信息     
    # mdadm -D /dev/md9     
    /dev/md9:     
            Version : 1.2     
      Creation Time : Wed Mar 23 17:23:44 2016     
         Raid Level : raid1     
         Array Size : 10477440 (9.99 GiB 10.73 GB)     
      Used Dev Size : 10477440 (9.99 GiB 10.73 GB)     
       Raid Devices : 2     
      Total Devices : 2     
        Persistence : Superblock is persistent
        Update Time : Wed Mar 23 17:24:37 2016    
              State : clean     
     Active Devices : 2     
    Working Devices : 2     
     Failed Devices : 0     
      Spare Devices : 0
               Name : node2.openstack.com:9  (local to host node2.openstack.com)    
               UUID : 766ecba3:768f11af:590df855:a3cfdc8f     
             Events : 17
        Number   Major   Minor   RaidDevice State    
           0       8       32        0      active sync   /dev/sdc     
           1       8       16        1      active sync   /dev/sdb
4、安装文件系统    
    # mke2fs /dev/md9     
    
5、挂载     
    # mount /dev/md9 /mnt     
    
6、模拟raid1中一个磁盘损坏的情况【模拟sdb损坏】     
    # mdadm /dev/md9 --fail /dev/sdb     
    
    建议:此时检查md9的详细信息     
    方式:mdadm -D /dev/md9     
    
7、修复raid1     
    (1)向raid1添加新磁盘     
    # mdadm /dev/md9 -a /dev/sdd     
    
    建议:此时检查md9的详细信息     
    方式:mdadm -D /dev/md9     
    
8、删除sdb     
    # mdadm /dev/md9 -r /dev/sdb     
    
    
    
阵列的停止和启动    
1、停止     
    # mdadm -S /dev/md9     
2、停止后再次启动raid     
    # mdadm -A /dev/md9 /dev/sdc /dev/sdd
   
mdadm -D --scan     
    可以显示系统中的raid阵列以及所使用的磁盘信息(uuid)
mdadm的配置文件,记录系统raid信息,可以用来实现快速启动raid阵列    
/etc/mdadm.conf     
【此文件默认不存在】
用重定向的方式,可以将系统的阵列信息保存到mdadm.conf中    
mdadm -D --scan > /etc/mdadm.conf     
    
以后再启动阵列,直接用阵列设备文件就可以,如下     
#mdadm -A /dev/md9     
lvm      
    DM:Device Mapper 设备映射
对比MD和DM    
    MD:将多个物理磁盘整合成一个逻辑磁盘     
    DM:将一个或多个物理磁盘整合成一个或多个逻辑磁盘
DM的功能    
    LVM2-->动态磁盘     
    快照     
    多路径
DM的核心原理
重要名词    
    物理卷:Physical Volume PV,可以理解物理卷就是物理磁盘     
    卷组:Volume Group VG,将所有物理磁盘的存储能力抽象成一个大的存储空间     
    逻辑卷:Logical Volume LV,从卷组中取出一部分存储空间构成一个分区     
    物理盘区:Physical Extend PE,只有将物理磁盘加入到卷组以后,才有PE的概念。     
              PE可以理解为物理卷中的一个一个存储单元。【只有进入卷组才是PE,否则不是】     
    逻辑盘区:Logical Extend LE.     
              其实pe和le是相同的东西,只是在卷组中叫做PE,在逻辑卷中叫做LE
    
动态磁盘的相关操作     
第一类:管理物理卷的命令(pv)     
    创建:pvcreate     
    删除:pvremove     
    扫描:pvscan     
    查看:pvs,pvdisplay     
    移动pv上的数据:pvmove     
        (通常用在要卸载的磁盘上)
第二类:管理卷组的命令(vg)    
    创建:vgcreate     
        -s #K|M|G|T|E:指定PE的大小,默认是4M     
    删除:vgremove     
    扫描:vgscan     
    查看:vgs,vgdisplay     
    扩大:vgextend  (其实就是向卷组中添加新的物理卷)     
    缩小:vgreduce     
    
第三类:管理逻辑卷的命令(lv)    
    创建:lvcreate     
        -n xx:指定逻辑卷的名称     
        -L #K|M|G|T|E:指定逻辑卷的大小   (其实就是指定分区的大小)     
    删除:lvremove     
    扫描:lvscan     
    显示:lvs,lvdisplay     
    扩大:lvextend   
    缩小:lvreduce     
    
    
sdf 3 ,sdg 5 ,sdj 10 ,sdi 15, sdh 20    
案例1:将以上硬盘做成逻辑卷    
1、创建逻辑卷     
    # pvcreate /dev/sdf /dev/sdi......     
2、查看当前系统中的逻辑卷     
    # pvs     
    # pvscan     
    # pvdisplay
例子2:前面的基础上,创建卷组     
    格式:     
1、加入卷组    
    # vgcreate myvg001 /dev/sd{f,h,i}     
2、查看     
    # vgs     
    # vgdisplay     
    # vgscan
案例3:将前面卷组中的sdh从卷组中删除     
1、移走sdh上的数据【必须执行】     
    # pvmove /dev/sdh     
2、从vg中剔除sdh     
    # vgreduce myvg001 /dev/sdh     
3、新建另一个卷组,名称为newvg,PE为8M     
    # vgcraete newvg -s 8M /dev/sd{g,h}
   
案例4:向newvg添加一个新的物理卷     
    # vgextend newvg /dev/sdj
案例5:在前面的基础上,创建一个500M的逻辑卷,名称是mylv     
    # lvcreate -n mylv -L 500M newvg     
    # lvs     
    # lvdisplay
   
逻辑卷的设备文件名称     
    /dev/卷组名/逻辑卷名   (只是链接)  
    /dev/mapper/卷组名-逻辑卷名
案例6:使用此逻辑卷     
1、安装文件系统     
    # mke2fs /dev/newvg/mylv     
2、挂载    
    # mount /dev/newvg/mylv /media     
    
    
调整逻辑卷的大小    
扩大物理边界的命令     
    lvextend     
        -L [+]#:     
            -L +5G: 在原来的基础上扩大5G的空间     
            -L 5G:扩展到5G     
扩大(调整)逻辑边界命令     
    resize2fs     
    格式:resize2fs lv的设备文件 NG     
    选项:     
        -p:将全部剩余的卷组都分给逻辑卷     
        resize2fs /dev/newvg/mylv 100G  将逻辑分区调整为100G     
        resize2fs -p /dev/newvg/mylv    有多少给多少
        
缩小逻辑分区     
    resize2fs     
缩小物理分区     
    lvreduce [-]     
        
        
案例7:将前面的500M的逻辑卷扩展到800M     
1、检查卷组的剩余空间     
    # vgs     
2、调整物理边界     
    # lvextend  -L 800M /dev/mapper/newvg-mylv     
3、调整逻辑编辑     
    # umount /dev/mapper/newvg-mylv     
    # e2fsck -f /dev/mapper/newvg-mylv     
    # resize2fs /dev/mapper/newvg-mylv 800M     
    # mount /dev/mapper/newvg-mylv /media
   
PS:调大空间操作, 必须先卸载所挂载的逻辑卷 ,在系统异常的情况下,需要检查逻辑卷的文件文件    
    
案例8:将前面的逻辑卷缩减为400M     
1、确认磁盘使用情况     
    # df -h     
2、卸载逻辑卷     
    # umount /dev/mapper/newvg-mylv     
3、检查文件系统     
    # e2fsck -f /dev/mapper/newvg-mylv     
4、缩减逻辑边界     
    # resize2fs /dev/mapper/newvg-mylv 400M     
5、缩减物理边界     
    # lvreduce -L 400M /dev/mapper/newvg-mylv     
6、重新挂载
   
快照卷     
    可以对系统中的重要文件进行保护。
注意:    
    1、新的快照卷当中是空     
    2、一旦出现快照卷满了,那么快照卷自动自毁     
    3、快照卷中的文件是只读状态的
   
创建快照卷的命令     
    lvcreate     
        -s:创建快照卷的专用选项     
        -p r|w:设置快照卷中的文件的属性  【默认是只读】
    创建快照卷的命令格式:    
    例子:创建一个100M的快照卷,快照卷的名称是myss,这个快照卷是针对/dev/mapper/newvg-mylv     
    # lvcreate -s  -L 100M -n myss -p r /dev/mapper/newvg-mylv
   
Author by:潇湘雨错
原文:http://www.cnblogs.com/xiaoxiangyucuo/p/5573662.html