Linux中的磁盤

Linux的磁盤管理node

(很重要請注意高能預警)linux

硬盤:幾個盤片,雙面,磁性顆粒,windows

處理速率不一樣步:藉助於一箇中間層   centos

文件系統(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是否生效架構


分區類型
    主分區
    擴展分區app

分區結構
    所有都是主分區:一、二、三、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
二、Reiserfs
    處理和保存小文件的處理很是優秀
三、xfs
    對大文件處理性能很是好。
    文件大小無上限。
四、JFS,日誌文件系統
    IBM所開發
五、vfat,其實就是windows下的fat32
六、NTFS,linux到目前爲止,對NTFS支持很差
   (若是必須使用NTFS,那麼建議只用NTFS來讀數據,不要執行寫操做)

2、集羣文件系統
一、GFS2:Global File System 2 (全局文件文件系統)
    由redhat所研發
二、OCFS2:Oracle Cluster File System 2 
    由Oracle所研發

3、網絡文件系統
一、NFS:
二、smbfs
三、windows磁盤映射 

4、光盤文件系統
一、iso9660

5、分佈式文件系統

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 爲例
    一、找到根(根是自引用)
    二、從根所在的磁盤塊表中,找出var所在的inode編號
    三、根據var所在的inode編號,就能夠找到var所在的磁盤塊
    四、由於var是目錄,因此var所在的磁盤塊中存放的是一張表,在表中記錄了log所在的inode
    五、根據log的inode編號,能夠找到log目錄所在的磁盤塊
    六、從log的磁盤塊的表中能夠找到message文件所在的inode編號
    七、從message的inode中,能夠找到該文件的磁盤塊,最終讀取出文件

新建文件    以在/etc/下新建文件zx.txt,大小是10K,爲例
    一、掃描inode bitmap,檢索出一個空閒的inode 。假設找出的1號inode
    二、找出目錄etc所在的磁盤塊,在該磁盤塊的表中添加一個條目,內容是 zx.txt-->1
        【到此爲止,就能夠在磁盤上看到該文件,可是文件沒法打開】
    三、掃描block bitmap,找出3個空閒磁盤塊,而後就能夠向磁盤塊中寫入數據。


ext系列文件文件系統的重要特性
    在向磁盤寫入文件的時候,會提早鎖定一個連續的空間
    若是後期發現空間不夠,那麼再鎖定一個連續空間
    若是發現空間有剩餘,那麼釋放剩餘部分
    【避免磁盤碎片產生】   
  
刪除文件     以在/etc/zx.txt爲例
    一、找到etc目錄所在的磁盤,將表中的索引刪除
        【此時從磁盤上,就看不到該文件了】
    二、將1號inode對應的inode bitmap置爲零
    三、將zx.txt所佔用的磁盤塊對應的block bitmap置爲0

複製文件   以在/etc/zx.txt複製到home下爲例
    一、先找出一個空閒inode (假設是6)
    二、找到home所在的磁盤塊,在磁盤塊的表中添加一個記錄 zx.txt -->6
    三、找出空閒磁盤塊
    四、將原文件磁盤塊上的數據依次複製到新找出的磁盤塊上

 

剪切文件  以在/etc/zx.txt剪切到home下爲例
    一、找到etc所在的磁盤塊,將磁盤塊的表中的zx.txt的索引記錄剪切下來
    二、找到home所在的磁盤塊,在磁盤塊的表中粘貼前面所剪切的索引記錄


塊組(Block Group)
    每一個塊組中,有獨立的inode,位圖

超級塊(super block)
    記錄包括
    一、塊組的數量
    二、各個塊中的磁盤數量、空閒數量、使用數量
    三、各個塊組中的inode數量,空閒數量,使用數量

塊組描述表(GDT)
    記錄各個塊組的範圍

BOOT BLOCK
    引導塊
    安裝雙系統的時候,第二個系統的引導程序安裝在bootblock中

PS:下面畫個圖說明下。。。不過畫的有點難看。。。將就看吧

image
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

 

新建交換分區的流程
1、新建一個分區
    分區格式id必須是 82
   
2、安裝swap文件系統
    # mkswap -f /dev/sdc2


mkswap命令
    做用:建立swap文件系統
    格式:swap [-f -L 卷標] DEVICE
   
3、激活swap分區
    # swapon /dev/sdc2
   

swapon命令
    做用:激活交換分區
swapoff命令
    做用:關閉交換分區

 

特殊場景:磁盤無剩餘空間(沒法再分區),可是分區中還有大量剩餘空間,此狀況下新建交換分區,能夠用 【磁盤鏡像文件】 來實現

磁盤鏡像文件:就是用一個文件,來模擬當中磁盤來使用。   
   
   
1、如何建立鏡像文件
一、dd命令
二、特殊設備文件
    /dev/zero--泡泡機
   
案例:在tmp下建立一個1G的文件disk.img   
    # dd if=/dev/zero of=/tmp/disk.img bs=1M count=1024
   
2、將新建的鏡像文件當作磁盤來建立交換分區
一、建立文件系統
# mkswap -f /tmp/disk.img
二、激活
# 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文件壓縮
一、gzip命令
    後綴:.gz
    格式:gzip file1 file2 ....
    選項:
        -d:解壓縮
        -#:指定壓縮比,1-9
            gzip -7 passwd
        -c:將壓縮結果輸出到標準輸出(一般用來保留原始文件)
       
        例子:壓縮passwd,要求保留原始文件
        # gzip -c passwd > passwd.gz

    解壓縮
    gunzip命令  
    zcat命令在不解壓的狀況下,查看壓縮包中的內容 
 

二、bzip2命令
    後綴:.bz2
    格式: 同上
    選項:
        -d:解壓縮
        -#:指定壓縮比,1-9
            gzip -7 passwd
        -k:保留原始文件

    解壓縮
    bunzip2   
    bzcat在不解壓的狀況下,查看壓縮包中的內容 
  
三、xz命令
    後綴:xz
    格式:同上
    選項:
        -d:解壓縮
        -#:指定壓縮比,1-9
            gzip -7 passwd
        -k:保留原始文件       

    解壓
    unxz 
注意:以上三個,只能壓縮文件,不能壓縮目錄           

四、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
    特色:模式化的命令

一、建立模式
    做用:建立陣列
    選項: -C
    模式中的子選項:
        -l #:指定陣列的級別
        -n #:指定建立陣列所使用的磁盤數量
        -a {yes|no}:yes,表示自動建立須要的設備文件
        【陣列的設備文件是/dev/md#】
        -c #:指定所切割的數據塊的大小,默認是512K,修改必須是512的整數倍
        【chunk】
        -x #:指定空閒(保留)磁盤的個數

二、管理模式
    操做
        添加:--add -a
        刪除:--del -d

三、監控模式   
    選項:-F

四、增加模式
    選項:-G
   
五、裝配模式
    選項:-A
   
【若是不指定,那麼默認就是管理模式】 
    
案例1:建立一個2G的raid0
    【既可使用磁盤,也能夠用分區來實現,此案例用分區實現】
   
一、建立兩個1G的分區
    注意:
        一、分區類型必須修改成fd
        二、不能在分區上安裝文件系統
   
二、建立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}

三、查看當前系統中的raid信息
    # cat /proc/mdstat

四、在raid0上安裝文件系統
    # mke2fs /dev/md0

五、掛載
    # mkdir /myraid0
    # mount /dev/md0 /myraid0


   
案例2:刪除raid0
一、查看raid0的基本信息   
    [root@test mkraid0]# cat /proc/mdstat
    Personalities : [raid0]
    md0 : active raid0 sdc2[1] sdc1[0]
          2119680 blocks super 1.2 512k chunks
   
二、卸載此raid0
    # umount /dev/md0

三、中止此RAID0
    # mdadm -S /dev/md0

四、清除此raid的超級塊中的數據   
    # mdadm --zero-superblock /dev/sdc1 /dev/sdc2


案例3:建立一個10G的raid1
    【使用物理磁盤來實現,每一個物理磁盤大小是10G】
一、使用sdb和sdc建立raid1
    # mdadm -C /dev/md9 -a yes -l 1 -n 2 /dev/sdc /dev/sdb
    【軟raid不能當作啓動分區來使用】
   
二、檢查raid1的同步狀況
    # cat /proc/mdstat
   
三、檢查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

四、安裝文件系統
    # mke2fs /dev/md9
   
五、掛載
    # mount /dev/md9 /mnt
   
六、模擬raid1中一個磁盤損壞的狀況【模擬sdb損壞】
    # mdadm /dev/md9 --fail /dev/sdb
   
    建議:此時檢查md9的詳細信息
    方式:mdadm -D /dev/md9
   
七、修復raid1
    (1)向raid1添加新磁盤
    # mdadm /dev/md9 -a /dev/sdd
   
    建議:此時檢查md9的詳細信息
    方式:mdadm -D /dev/md9
   
八、刪除sdb
    # mdadm /dev/md9 -r /dev/sdb
   
   
   
陣列的中止和啓動
   
一、中止
    # mdadm -S /dev/md9
二、中止後再次啓動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:將以上硬盤作成邏輯卷   
一、建立邏輯卷
    # pvcreate /dev/sdf /dev/sdi......
二、查看當前系統中的邏輯卷
    # pvs
    # pvscan
    # pvdisplay

例子2:前面的基礎上,建立卷組
    格式:
一、加入卷組   
    # vgcreate myvg001 /dev/sd{f,h,i}
二、查看
    # vgs
    # vgdisplay
    # vgscan

案例3:將前面卷組中的sdh從卷組中刪除
一、移走sdh上的數據【必須執行】
    # pvmove /dev/sdh
二、從vg中剔除sdh
    # vgreduce myvg001 /dev/sdh
三、新建另外一個卷組,名稱爲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:使用此邏輯卷
一、安裝文件系統
    # mke2fs /dev/newvg/mylv
二、掛載   
    # 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
一、檢查卷組的剩餘空間
    # vgs
二、調整物理邊界
    # lvextend  -L 800M /dev/mapper/newvg-mylv
三、調整邏輯編輯
    # 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
一、確認磁盤使用狀況
    # df -h
二、卸載邏輯卷
    # umount /dev/mapper/newvg-mylv
三、檢查文件系統
    # e2fsck -f /dev/mapper/newvg-mylv
四、縮減邏輯邊界
    # resize2fs /dev/mapper/newvg-mylv 400M
五、縮減物理邊界
    # lvreduce -L 400M /dev/mapper/newvg-mylv
六、從新掛載


快照卷
    能夠對系統中的重要文件進行保護。

注意:
    一、新的快照卷當中是空
    二、一旦出現快照卷滿了,那麼快照卷自動自毀
    三、快照卷中的文件是隻讀狀態的


建立快照卷的命令
    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:瀟湘雨錯

相關文章
相關標籤/搜索