#10 Linux硬碟管理

weixin_34117211發表於2017-11-12

1.儲存管理

傳統的磁碟分割槽

RAID技術,軟RAID的實現

LVM

檔案系統管理

ext,xfs,btrfs(瞭解)

2.程式包管理

rpm、yum、dnf

3.sed、gawk

4.程式管理

5.網路管理

網路基礎只是(Cisco CCNA+CCNP)

網路的屬性管理

網路引數監測

6.Linux核心管理

核心編譯和安裝

核心的裁剪

定製核心

7.Linux系統啟動流程

centos5、6、7

8.系統安裝

kickstart、dhcp、pxe

9.shell指令碼的完善


Linux儲存管理

磁碟的介面型別:

IDE:並口,來源於ATA,133Mbps

SCSI:並口,

UltraSCSI320:320Mbps

UltraSCSI640:640Mbps

窄帶:7  14

寬頻:15 30

SATA:serial ATA,串列埠

SATA1 2 3 6Gbps

SAS:串列埠

6Gbps

USB:

1.0 1.1 2.0 3.0:480Mbps 3.1:10Gbps


    雙通道:160Mbps


    IOPS:每秒IO次數


      IDE:機械硬碟,50IOPS

     SCSI:機械硬碟,100-200IOPS

     固態硬碟,400左右

     SATA:機械硬碟,100左右

     固態硬碟,400左右

      SAS:機械硬碟,200左右

       固態硬碟,800左右


     PCI-E固態硬碟:100000+ ES3000 DEC


IDE:主機板上兩個介面,4塊IDE硬碟

SATA:4-6介面,4-6塊硬碟

SCSI:7 15

SAS:16384塊硬碟


寫一個指令碼,向每個預設shell為bash的使用者問好,如:Hi root

#!/bin/bash

#

for I in $(grep "bash$" /etc/passwd | cut -d: -f1) ; do

echo "Hi $I"

done


機械硬碟:

track:磁軌,

sector:扇區,512bytes,現在所說的扇區,實際上是平均值;

cylinder:柱面,從磁軌向所有碟片做投影;

partition:分割槽,分割槽就是基於柱面來劃分的儲存空間;

head:磁頭,每個磁碟表面都有一個磁頭;


裝置檔案:/dev

裝置檔案是關聯到硬體裝置的驅動程式和裝置的訪問入口;


裝置號:

major:主裝置號,區分裝置的型別,用於標明裝置所需的驅動程式;

minor:次裝置號,區分同種型別下的不同裝置,是特定裝置的訪問入口;


mknod命令:

mknod - make block or character special files

mknod [OPTION]... NAME TYPE [MAJOR MINOR]

       -m, --mode=MODE;指定檔案許可權

      塊裝置為b

      字元裝置為c


裝置型別:

塊裝置:用於隨機訪問的裝置,資料儲存和交換的單位是塊;

字元裝置:用於線性訪問的裝置,資料的交換單位一般是字元;


裝置檔名:IANA-->ICANN

ICANN的命名標準為:所有的裝置都放在/dev/

/dev/

IDE:hd[a-d]

SCSI/SATA/SAS/USB:sd[a-z] sda sdaa


 RHEL6、centos6開始:

  所有的介面型別的硬碟裝置統一命名為sd[a-z]


裝置引用方式:

裝置檔名

卷標(volume lable)

UUID:全域性唯一識別符號,128bit


如何使用一個新的硬碟裝置?

分割槽

建立檔案系統(格式化)

掛在分割槽


為何分割槽?

1.優化I/O效能

2.實現磁碟空間的配額限制

3.進行高速修復

4.隔離系統檔案和其他程式檔案

5.安裝多個作業系統


如何分割槽?

MBR:硬碟空間小於2TB

MBR:master(main) boot record,主開機記錄,起源於1982年,

0磁軌0扇區:512byte

446bytes:boot loader,引導載入程式,grub

64bytes:partition 

table,分割槽表,每16bytes表明一個分割槽的內容,因此一共有四個主分割槽;

注意:

1.主分割槽+擴充套件分割槽,最多可以有4個,其分割槽表位的編號依次為:1,2,3,4

2.邏輯分割槽的編號從5考試,不管前面的四個數字編號是否被佔用;

2bytes:結束標記,55AA


GPT:硬碟空間大於2TB

guide partition table,guid分割槽表,支援128個分割槽

uefi(統一擴充套件韌體介面)的硬體可以支援GPT,boot legacy


通常使用的分割槽工具,

fdisk:

用於建立和管理MBR分割槽,對於一塊硬碟,最多隻能管理15個分割槽;


gdisk:gun disk

用於建立和管理gpt分割槽,


如果使用fdisk或gdisk命令對於已經有分割槽並掛載的磁碟的剩餘空間進行再次分割槽,分割槽的資訊即便是儲存了,也不會被核心重新讀取;如果要讓核心識別此類分割槽:

1.重啟計算機

2.partprobe命令或者partx命令,強制核心重讀分割槽表;

centos5/7:partprobe -a [device]

如果省略了裝置名,則表示重讀所有磁碟的分割槽表

centos6/7:partprobe -a [device]

 partx -af [device]


    fdisk分割槽示例:

     fdisk - Partition table manipulator for Linux


     fdisk -l [-u] [device...]

     檢視指定磁碟的分割槽表,如果省略device引數,則顯示所有磁碟裝置的分割槽表;


     fdisk device

     對於指定裝置進行分割槽管理;


     fdisk子命令:

         d  delete a partition

         l  list known partition types

         m  print this menu

         n  add a new partition

           e   extended

           p   primary partition(1-4)

           l   logical

         p  print the partition table

          q  quit without saving changes

         t  change a partition's system id

         w  write table to disk and exit



parted:gun

高階分割槽工具,實時生效;

      parted - a partition manipulation program


      parted [options] [device [command [options...]...]]


      parted /dev/sdb mklabel gpt|modos

      parted /dev/sdb print

      parted /dev/sdb mkpart primary 1 200

      parted /dev/sdb rm 1


      echo '- - -' > /sys/class/scsi_host/host2/scan

      強制核心識別在開機狀態下插上的SCSI介面的磁碟


寫一個指令碼,將一個命令所依賴的共享庫檔案複製到/mnt/sysroot/lib64目錄中,如果庫檔案已經存在於目標目錄中,就不復制。

#!/bin/bash

#

DEST=/mnt/sysroot/lib64

if [ ! -d $DEST ] ; then

mkdir -p $DEST

fi


until [ "$CMD" == 'quit' ] ; do

read -p "give me a command: " CMD

if which --skip-alias $CMD &> /dev/null ; then

for I in $(ldd $(which --skip-alias $CMD) | grep -o "/[^[:space:]]\+") ; do

SRCLIB=$(basename $I)

if [ ! -e ${DEST}${SRCLIB} ] ; then

cp $I $DEST

fi

done

else

echo "Command not invalid."

fi

done


  建立檔案系統:

   FHS /bin /dev /cet

   許可權

   檔案的命名規則


   為什麼要建立檔案系統?

   一百萬冊圖書

   平面分類管理

   想要搜尋需要的圖書,需要遍歷;

   空間分類管理

   門類

   幾次有限的但有效的查詢即可;


   建立檔案系統實際上就是給分割槽進行儲存空間的邏輯編制;


  格式化:

   低階格式化:

   物理層面完成格式化,在磁碟裝置出廠時,通過低階格式化來建立磁軌;

   主要作用:劃分磁軌


   高階格式化:

   分割槽之後進行,

   主要作用:用來建立檔案系統,為分割槽構建邏輯編制單元,Windows系統邏輯單元=簇,Linux系統邏輯單元=塊,無論是簇還是塊,都是將一個或多個扇區組織在一起,共同完成資料儲存;

   簇:512b 1024 2048 4096 8192 16384 32768 65536

   塊:1024 2048 4096


   注意:

   1.一個塊只能放置一個檔案的內容,一個檔案可以佔用多個塊;

   2.如果在某個分割槽中,將建立大量的小檔案,把塊劃分的小一些;反之,塊就大些

   3.如果分割槽空間比較大,塊也應該大一些;


  在一個分割槽中建立了檔案系統:

   首先,會將分割槽劃分成大小相等的若干塊;

   後設資料塊

   後設資料——inode(index node)

   檔案的屬性:

   檔案的大小

   檔案許可權

   檔案所有者

   檔案時間戳

   資料塊指標


   存放後設資料的固定的儲存空間,稱為inode;


   每個inode都有其對應的inode編號


   資料塊

   存放檔案中所包含的流式資料


   特殊檔案:

   裝置檔案:block special 或 character special

   僅僅是將元素資料中的資料塊指標換成了裝置號;

   符號連結檔案:symbolic link

   僅僅是將後設資料中的資料塊指標換成了另一個檔案的訪問路徑;


   這類檔案只佔後設資料區域,沒有資料塊佔用:


   隨著磁碟空間越來越大,劃分的塊的數量也越來越多,管理起來很不方便


   劃分快租可以解決該問題


   塊組:

   每個塊組中有獨立的後設資料塊和資料塊

   存放資料的時候,以塊組內的資料塊優先選擇,如果塊組內的資料塊不夠,可以通過儲存策略來請多個塊組協同儲存;


   超級塊:

   主要定義了有多少個塊組,以及每個塊組的邊界。


   為了防止超級塊發生故障導致整個檔案系統崩潰,對超級塊進行冗餘備份


   日誌塊:

   對於資料的寫入操作做記錄的塊;


   防止資料不一致;


   資料不一致通常都是由不潔關機,不斷電導致;


  一個完整的檔案系統:

   超級塊,inode,inode bitmap,block bitmap,data block,journal block


  想要查詢/var/log/messages檔案的內容,是怎樣的過程?


   首先查詢/目錄inode編號,從後設資料區域中找到對應的inode,再讀取inode中的資料塊指標,找到/目錄的資料塊;

   然後,在資料塊中查詢名稱為var的檔名,如果有,就定位其inode編號,再到後設資料區域中查詢對應編號的inode,再根據資料塊指標找到儲存var目錄內容的資料塊;

   再然後,在該資料塊中查詢名稱為log的檔名,如果有,就定位其inode編號,再到後設資料區域中查詢對應編號的inode,再根據資料塊指標找到log目錄內容的資料塊;

   之後,在該資料塊中查詢名稱為messages的檔名,如果有,就定位其inode編號,再到後設資料區域總查詢對應編號的inode,再根據資料塊指標找到messages檔案對應的資料塊,就可以讀取資料;


  系統呼叫


  Linux支援的檔案系統:

   位於核心空間中的檔案系統驅動

   1.核心一部分

   2.核心模組

   位於使用者空間中的檔案系統管理應用程式

   管理命令


   Linux自己的檔案系統:

   ext ext2 ext3 ext4(最大分割槽50TB,可以做根分割槽,可以做啟動分割槽)

   xfs(企業級64位檔案系統,最大分割槽500TB,可以做根和啟動分割槽)

   reiserfs(良好的反刪除功能)

   btrts(技術預覽版)


   光碟檔案系統:iso9660

   網路檔案系統:NFS、CIFS

   叢集檔案系統:gfs2、ocfs2

   核心級的分散式檔案系統:ceph

   偽檔案系統:proc、sysfs、tmpfs、hugepagefs


   Windows的檔案系統:vfat、ntfs


   Unix的檔案系統:ufs、ffs、jfs、zfs


   交換分割槽檔案系統:swap


   使用者空間中的分散式檔案系統:mogilefs、moosefs、glusterfs


  對於不同的發行版的Linux,都有其預設的檔案系統選擇:

   RHEL、centos

   5:ext3

   6:ext4

   7:xfs


檔案系統的管理工具:


寫一個指令碼,如果發現使用者hacker登入,則將登入時間和主機記錄於日誌/var/log/login.log中;

#!/bin/bash

#

if who | grep -q "\<hacker\>" ; then

  for I in $(who | grep "\<hacker\>" | cut -d ' ' -f3-5 --output-delimiter=' '); do

    echo -n $I >> /var/log/login.log

  done

fi


  管理檔案系統:

   建立檔案系統:

   mkfs

   mkfs.ext2,mkfs.ext3,mkfs.ext4,mkfs.xfs,mkfs.btrfs,...


   檔案系統檢測和修復工具

   fsck

   fsck.ext2,fsck.ext3,fsck.ext4,fsck.xfs, ...


   檔案系統屬性檢視工具

   dump2fs


   檔案系統的屬性調整工具

   tune2fs


  建立檔案系統工具:

   mkfs命令:

   mkfs - build a Linux filesystem

      mkfs [options] [-t type] [fs-options] device [size]


      mkfs -t ext2 /dev/sdb1


      注意:

       1.不要使用磁碟裝置名稱和擴充套件分割槽裝置名稱作為mkfs命令的引數;

       如果使用磁碟裝置作為mkfs的引數,所有的分割槽都將被刪除

       如果使用擴充套件分割槽作為mkfs的引數,所有的邏輯分割槽都將被刪除

       2.能夠作為mkfs命令引數的裝置,是主分割槽裝置和邏輯分割槽裝置;


    如果只是計劃建立ext系列檔案系統的話,可以使用mke2fs命令:

     mke2fs

       mke2fs - create an ext2/ext3/ext4 filesystem

         常用選擇:

           -b block-size:在建立檔案系統時,調整塊大小;

           -i bytes-per-inode:指明inode與位元組的比率,即:多少個位元組可以建一個inode,預設值為16384;

           -I inode-size:直接指明inode的大小

           -j:建立有日誌功能的檔案系統,就是ext3

           -N number-of-inodes:直接指明要給此檔案系統建立的inode的數量;

           -m reserved-blocks-percentage:指定為超級使用者root預留的磁碟空間的百分比;預設值是5

           -t fs type:指定檔案系統型別,ext2 ext3 ext4,預設是ext2

           -O [^]feature[,...]:關閉或開啟檔案系統的特性

           -L volume-label:為檔案系統指定卷標;


    如果只計劃修改ext系列檔案系統的卷標,可以使用e2label命令:

     e2label:

     e2label - Change the label on an ext2/ext3/ext4 filesystem

     e2label device [ new-label ]


        注意:如果不加捲標資訊,表示檢視指定裝置卷標;

         如果新增了卷標資訊,表示修改指定裝置的卷標;


    如果想要修改ext系列檔案系統的屬性,可以使用tune2fs命令

     tune2fs:

     tune2fs - adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems

     調整那些在ext2,3,4檔案系統上的可修改的引數;

     常用選擇:

     -j:將ext2檔案系統修改為ext3(不能從ext3修改為ext2)

     -m reserved-blocks-percentage:修改為超級使用者root預留的磁碟空間的百分比;

     -o [^]mount-options[,...]  :修改檔案系統的預設掛載選擇;

     -r reserved-blocks-count:修改為超級使用者預留的磁碟空間的塊的數量;

     -L  vol-ume-name:修改檔案系統的卷標

     -O [^]feature[,...]:修改檔案系統的特性,將其關閉或啟用;

     -l:顯示超級塊的內容 相當於dumpe2fs -h


檔案系統的檢測修改工具:

   fsck

   -t fstype:指定要檢測的檔案系統型別;

   -a:無需互動,自動修復所有問題

   -r:互動式修復問題


   ext系列檔案系統專門的檢測修復工具:

   e2fsck

   -y:在互動過程的所有的問題,都是以“yes”回答;

   -f:強制檢測修復;即使檔案系統處於clean狀態;


   blkid:

   blkid - command-line utility to locate/print block device attributes

   blkid -L label:根據卷標查詢

   blkid -U uuid:根據UUID查詢


   findfs:

   findfs - Find a filesystem by label or UUID

   findfs LABEL=label

      findfs UUID=uuid


  建立swap檔案系統

   前提:分割槽型別必須是swap型別

   修改的方法是:在fdisk互動模式中,使用t命令將指定分割槽的型別修改為82即可:

   mkswap:

   mkswap - set up a Linux swap area

   -L label:設定互動分割槽的卷標

   -f:強制執行


  使用檔案系統——掛載

   FHS


   根檔案系統之外的其他檔案系統如果想要被訪問;都必須通過某種方式關聯到根檔案系統上,具體做法就是把其他檔案系統裝載到根檔案系統中的某個目錄之中;這個過程為“掛載”,用於關聯其他檔案系統的那個目錄,稱為掛載點;


   掛載點:mount point,也是其他檔案系統的訪問入口;例如:/boot

   要求:

   1.作為掛載點的目錄必須事先存在;

   2.作為掛載點的目錄應該是沒有被使用或不能被其他程式使用的目錄;

   3.作為掛載點的目錄一旦掛載檔案系統,其內原有的檔案將被隱藏;


   完成掛在操作,使用mount命令:

   mount

   mount - mount a filesystem

   mount [-fnrsvw] [-t vfstype] [-o options] device dir

   常用選項:

   -r, --read-only:以只讀的方式掛載目標檔案系統;光碟

   -w, --read and write:以讀寫的方式掛載目標檔案系統;

   -n, --no-mtab:預設情況下,裝置掛載或解除安裝的操作會同步更新到/etc/mtab中,如果在掛載時使用了-n選擇,則表示我們要禁用此特性,即便掛載成功,也不會更新到/etc/mtab中;

   -t, --types:指明要掛載的裝置上建立的檔案系統型別;如果省略該選項,mount命令會通過blkid來判斷要掛載的目標裝置的檔案型別;

   -L label:掛載檔案系統時,使用卷標代替裝置名稱

   -U uuid:掛載檔案系統時,使用UUID代替裝置名稱

   -a:mount -a:按照/etc/fstab檔案中填寫的裝置進行自動掛載;

   -o option:

   sync/nosync:同步/非同步操作

   atime/noatime:檔案或目錄被讀取訪問時,是否更新訪問時間戳;

   diratime/nodiratime:目錄被讀取訪問時,是否更新訪問時間戳;

   ro/rw:是以只讀/讀寫的方式掛載檔案系統;

   dev/nodev:在此檔案系統中是否允許建立裝置檔案;

   exec/noexec:在此檔案系統中是否允許執行程式檔案;

   auto/noauto:是否允許使用mount -a 方式掛載/etc/fstab中的檔案系統;

   user/nouser:是否允許普通使用者掛載此檔案系統;

   suid/nosuid:是否允許程式上的suid和sgid特殊許可權生效;

   relatime/norelatime:是否參考inode訪問時間來修改其修改時間和改變時間

   remount:不經解除安裝實現重新掛載,可以應用新的掛載選項;

   acl:可以使檔案系統支援facl功能;

   defaults:預設選項包括:rw, suid, dev, exec, auto, nouser, async, and relatime

   defaults,ro,nosuid

   loop:使用環回裝置;將映象檔案掛載到掛載點上

   -B, --bind:將某個目錄繫結至另一個目錄;

   mount --bind|-B 源目錄 目標目錄


  解除安裝檔案系統:  

umount: umount_point|device


掛載光碟:

1.保證光碟映象檔案放入虛擬機器光碟機

2.保證光碟機處於“已連線”狀態

3.建立光碟掛載點, 


掛載U盤:

需要事先讓系統識別U盤裝置,然後根據裝置名進行掛載:/dev/sdc1


掛載交換分割槽:

swaponm,swapoff

swapon, swapoff - enable/disable devices and files for paging and swapping


-a:自動掛載儲存於/etc/fstab檔案中的互動分割槽裝置;


df 

 -h -T -P

free

 -k -m -g


  /etc/fstab檔案的格式:

   共6個欄位,使用空白字元分隔:

   1.要掛在的裝置名:

   裝置檔案嗎

   LABEL

   UUID

   偽檔案系統

   2.掛載點:

   swap裝置無需掛載點,指定swap即可

   3.檔案系統型別:

   4.掛載選項:defaults

   5.轉儲頻路:

   使用dump命令備份分割槽的頻路

   0:表示不備份

   1:每天備份一次

   2:每隔一天備份一次

   6.自檢次序:

   0:不自檢

   1:優先自檢,通常只設定在根檔案系統上

   2:次級自檢

   ...

   9:最低優先順序自檢

本文轉自誰等了誰 51CTO部落格,原文連結:http://blog.51cto.com/12486569/1922284


相關文章