Linux中的磁盤


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:下面畫個圖說明下。。。不過畫的有點難看。。。將就看吧

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

 

新建交換分區的流程
一、新建一個分區
    分區格式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:瀟湘雨錯


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM