两种特殊文件;

   设备文件;

      mknod

   符号链接文件;


  链接;就是访问一个文件的不同的路径

    硬链接;

       数据块指针指向同一个数据块的文件;

       每次创建硬链接都会增加inode的引用计数

      注意;不能跨文件系统创建硬链接,目录文件不能创建硬链接


    符号链接(软链接)

        用于存储被链接文件的路径的文件

        可以夸文件系统创建,

        也可以对目录创建符号链接

        每次都必须进行两组路径的查找


   ln命令;

    ln [option...] src_file link_file

      -s,--symbolic;创建符号链接,省略该选项,即创建硬链接

      -v, --verbose;显示链接创建的过程可以,最好链接至


   注意;创建符号链接时,如果想要保证该链接文件被复制或移动到其他路径中依然可以,最好链接至被链接文件的绝对路径


   版本管理;

      apache;

       2.2  2.4

       将不同的版本的软件分别放置于不同的目录中,使用符号,将软件链接的一个统一的路径;


       /usr/local/apache ---> /usr/local/apache-2.2


       /usr/local/apache-2.2

       /usr/local/apache-2.4


RAID;

  IDE

  SCSI


  Redundant Array of Inexpensive Disks;廉价磁盘冗余阵列

  Redundant Array of Independent Disks;独立磁盘冗余阵列


  RAID;

    提高IO能力

      使多个磁盘实现并行读写;

      磁盘条带化,chunk

    提高耐用性

      磁盘冗余实现

      即使磁盘发生故障或损坏,也不会影响数据;


  RAID的实现方式;

    硬件实现;

      通过硬件RAID控制器或适配器,将所需的磁盘组织成RAID,而后安装OS;

      BIOS程序


    软件模拟实现;

      操作系统通过系统调用的方式模拟RAID实现


  RAID的操作级别;

      RAID0;

        提高IO性能,条带卷,strip

         至少2块磁盘

         没有冗余容错能力

         没有存储空间浪费,要求每个磁盘必须提供相同大小的存储空间;

      RAID1;

        提供高可用性,镜像卷,mirror

         需要2块磁盘

         先将数据存入主盘,然后再将数据存入从盘;

         写入效率较低,略微提升读效率

         磁盘空间的整体利用率为50%

         有冗余容错的能力

      RAID2;

      RAID3;

      RAID4;

        多块磁盘进行异或运算,得到校验值,并且使用专门的一块磁盘存放校验值;

        即使一块磁盘损坏,也不会丢失数据

        校验盘IO压力巨大,很容易形成性能瓶颈;

      RAID5;

        多块磁盘进行循环冗余校验吗,将校验值随机分配到不同磁盘的条带中;

        读,写IO性能均明显提升,又不会出现性能瓶颈

        磁盘利用率=(n-1)/n * 100%

        冗余容错

        至少需要3块磁盘

      RAID6;

        多块磁盘进行两轮循环冗余校验,将校验值随机分配到两个不同磁盘的条带中

        读,写IO性能均明显提升,又不会出现性能瓶颈

        最多运行两块磁盘出现故障或损坏依然保证数据可用

        代价就是增加了计算校验值的时间;


  RAID混合级别;

      RAID01;

        先做RAID0,在做RAID1

      RAID10;

        先做RAID1,在做RAID0

      RAID50;

        先做RAID5,在做RAID0

      RAID7;

        可以理解为一个存储计算机,自带操作系统以及相应的管理工具,可以独立运行


      JBOD;just a bunch of disks;仅仅就是一组磁盘

        将多块磁盘的存储空间连接到一起,顺序存放数据


  在centos上实现软RAID

      内核提供一个md的模块(multi disks,multi devices)

      用户空间需要mdadm的工具,来设置和修改md内核模块的参数;


    mdadm;模式化工具

      mdadm [mode] <raiddevice> [option...] <component device>

        模式包括;

           创建模式;-C

                -n#(数字):使用#(数字)块硬盘创建RAID设备

                -l#(数字);指示RAID的级别

                -a{yes|no};允许系统或不允许系统自动创建md设备文件;

                -c CHUNK_SIZE;指定CHUNK的大小,

                -x#(数字);指定在阵列中空闲磁盘的数量

           装配模式;-A

           

              根据/etc/mdadm.conf指示的RAID进行装配

           管理模式;-a,-r,-f

           杂项;

             -D,--scan

                显示RAID设备的详细信息

                mdadm -D --scan > /etc/mdadm.conf

                该配置文件用于RAID设备的再次装配

             -S;停止RAID的设备


      dd


  LVM2;

    logical volume manager,逻辑卷管理器,Version 2

    IBM


    使用纯软件的方式组织一个或多个底层的块设备,将他们重新定义为一个逻辑块设备的解决方案;


    利用内核中的dm模块实现;

    dm;device mapper,设备映射表

    dm模块可以将一个或多个底层块设备组织成一个逻辑块设备;

    用户空间中的相应命令来向dm模块发出系统调用,就可以完成后逻辑块设备的管理;


    逻辑块设备同意存放在/dev/dm -#(数字)


    使用DM机制实现LVM管理的步骤;

       1.创建并标识物理卷

           注意;如果用来创建物理卷的设备是普通分区,一定要将分区的ID修改为8e;

       2.基于PV创建卷组,逻辑块设备,创建卷组的同时指定PE的大小

           注意;一旦PE大小被指定,就不允许更改,

       3.在已经创建的卷组中创建逻辑卷

       4.在逻辑卷中创建文件系统(高级格式化)

       5.挂载


    物理卷的管理操作;

      pvcreate;创建物理卷

      pvdisplay;显示物理卷的详细信息

      pvs;显示物理卷的简单信息

      pvremove;删除物理卷

      pvmove;将某个物理卷中的所有的PE移动到其他物理卷中;


    卷组的管理操作;

      vgcreate;创建卷组

         -s #(数字){kkmMgG};指定PE的大小,如果省略选项,默认的PE为4M

      vgremove;删除卷组

      vgextend;扩展卷组容量,将新的pv添加到卷组中

      vgreduce;缩减卷组容量,将pv从卷组中移除,在做此操作之前,应该先使用pvmove,保证被移除的pv上没有被占用的PE

      vgdisplay;显示卷组的详细信息

      vgs;显示卷组的简短信息


    逻辑卷的管理操作;

      lvcreate;创建逻辑卷

         -L lv_SIZE(#(数字){kk|mM|gG});指定逻辑卷的大小,不能超过卷组的容量

         -l #(数字)%{FREE|VG|ORIGIN|PVS};指定逻辑卷占用对应存储单元的百分比

         -n LV_name;指定逻辑卷的名称

         -i #(数字);在创建逻辑卷的时候,以条带的方式创建,并指明这个逻辑卷上有#(数字)个条带

         -I #(数字);在创建逻辑卷的时候,以条带的方式创建,并指明CHUNK的大小;

      lvremove;删除逻辑卷

      lvdisplay;显示逻辑卷的详细信息

      lvs;显示逻辑卷的简短信息

      lvchange;修改LV的状态

         -ay;激活逻辑卷

         -an;停用逻辑卷

      lvextend;扩展逻辑卷的空间; 

         注意;一定要扩展逻辑卷的物理边界,在扩展逻辑卷的逻辑边界

               使用ext系列文件系统的时候,resize2fs命令扩展逻辑边界

      lvreduce;缩减逻辑卷的空间;

         注意;先缩减逻辑卷的逻辑边界,在缩减逻辑卷的物理边界

               使用ext系列文件系统的时候,resize2fs命令缩减逻辑边界使用


        为了更好的使用逻辑卷,为/dev/dm-#(数字)设备创建了两个符号链接为念;

           /dev/mapper/VG_NAME-LV_NAME  -->  ../dm-#(数字)

           /dev/VG_NAME/LV_NAME --> ../dm -#(数字)


    逻辑卷的快照;

        快照,本身就是一种逻辑卷;目标逻辑卷的另外一个访问路径;

        lvcreate -s -p r -L 15G -n mylv-snopshot /PATH/TO/DEST_LV

           -L SIZE:指定快照逻辑卷的大小

           -s:创建一个快照逻辑卷

           -p r:创建处理的逻辑卷是只读权限

           -n SNAPSHOT_NAME:指定快照逻辑卷的名称


三个命令:

  df命令:

    df - report file system disk space usage

    df [OPTION]... [FILE]...

      -h, --human-readble:单位转换

      -l, --local:只显示本地文件系统,不显示网络文件系统

      -i, --inodes:显示inode使用状态

      -T, --print-type:显示文件系统类型

      -P, --portability:使用POSIX输出格式,更易于阅读



  du命令:

    du - estimate file space usage

    du [OPTION]... [FILE]...

      -s, sumary,:显示整个目录汇总的文件大小

      -h, human-readble:单位转换


  dd命令:convert and copy a file

    dd [OPERAND]...

    dd OPTION


    常见的OPERAND:

      dd if=/PATH/FROM/SRC of=/PATH/TO/DEST

      bs=BYTES:block size, 复制单元大小

      count=N:复制多少个bs

      of=FILE:写到所命名的文件而不是到标准输出

      if=FILE:从所命名文件读取而不是从标准输入

      ibs=BYTES:一次读size个byte

      obs=BYTES:一次写size个byte

      skip=BLOCKS:从开头忽略blocks个ibs大小的块

      seek=BLOCKS:从开头忽略blocks个obs大小的块

      conv=conversion[,conversion...]:用指定的参数转换文件。

      转换参数:

        ascii:转换EBCDIC为ASCII。

        ebcdic:转换ASCII为EBCDIC。

        block:把每一行转换为长度为cbs的记录,不足部分用空格填充。

        unblock:使每一行的长度都为cbs,不足部分用空格填充。

        lcase:把大写字符转换为小写字符。

        ucase:把小写字符转换为大写字符。

        swab:交换输入的每对字节。

        noerror:读取出错时继续读取。

        notrunc:不截短输出文件。

        sync:把每个输入块填充到ibs个字节,不足部分用空(NULL)字符补齐


  磁盘拷贝:

    ~]# dd if=/dev/sda of=/dev/sdb

  备份MBR:

    ~]# dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1

  破坏MBR中的bootloader:

    ~]# dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446

  有二进制文件fileA,size>2K。现在想从第64个字节位置开始读取,需要读取的大小是128Byts。又有fileB, 想把上面读取到的128Bytes写到第32个字节开始的位置,替换128Bytes,请问如何实现?

    ~]# dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc

  备份:

    将本地的/dev/sdx整盘备份到/dev/sdy

      ~]# dd if=/dev/sdx of=/dev/sdy将本地的/dev/sdx整盘备份到/dev/sdy

    将/dev/sdx全盘数据备份到指定路径的p_w_picpath文件

      ~]# dd if=/dev/sdx of=/path/to/p_w_picpath

    备份/dev/sdx全盘数据,并利用gzip工具进行压缩,保存到指定路径

      ~]# dd if=/dev/sdx | gzip >/path/to/p_w_picpath.gz


  恢复:

    将备份文件恢复到指定盘

      ~]# dd if=/path/to/p_w_picpath of=/dev/sdx

    将压缩的备份文件恢复到指定盘

      ~]# gzip -dc /path/to/p_w_picpath.gz | dd of=/dev/sdx


  拷贝内存资料到硬盘

    将内存里的数据拷贝到root目录下的mem.bin文件

      ~]# dd if=/dev/mem of=/root/mem.bin bs=1024


  从光盘拷贝iso镜像

    拷贝光盘数据到root文件夹下,并保存为cd.iso文件

      ~]# dd if=/dev/cdrom of=/root/cd.iso


  销毁磁盘数据

    利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。执行此操作以后,/dev/sda1将无法挂载,创建和拷贝操作无法执行。

      ~]# dd if=/dev/urandom of=/dev/sda1


  得到最恰当的block size

    通过比较dd指令输出中所显示的命令执行时间,即可确定系统最佳的block size大小

      ~]# dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file

      ~]# dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file

      ~]# dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file

      ~]# dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file


  测试硬盘读写速度

    通过上两个命令输出的执行时间,可以计算出测试硬盘的读/写速度

      ~]# dd if=/root/1Gb.file bs=64k | dd of=/dev/null

      ~]# dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000


  修复硬盘

    当硬盘较长时间(比如1,2年)放置不使用后,磁盘上会产生消磁点。当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数据起死回生。且这个过程是安全,高效的。

      ~]# dd if=/dev/sda of=/dev/sda