文件系統和本地存儲管理 1

Linux系統管理

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


回顧:

while until select case 

break continue

function


Linux系統管理

存儲管理


機械硬盤:

track:磁道,

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

cylinder:柱面,從磁道向所有盤片做投影

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

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


設備文件:/dev

設備文件是關聯到硬件設備的驅動程序和設備的訪問入口;


設備號:

major:主設備號,區分設備的類型,用於標明設備所需的驅動程序;

minor:次設備號,區分同種類型下的不同設備,是特定設備的訪問入口;


mknod命令:

mknod - make block or character special files

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


設備類型:

塊設備:用於隨機訪問的設備,數據存儲和交換的單位是塊;

字符設備:用於線性訪問的設備,數據的交換單位一般是字符;


設備文件名:IANA-->ICANN 

/dev/

IDE:hd[a-d]

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


RHEL6、CentOS6開始:

所有的接口類型的硬盤設備統一命名爲sd[a-z]


設備引用方式:

設備文件名

卷標(Volume Lable)

link

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

GUID Partition Table,GUID分區表,支持128個分區

UEFI(統一擴展固件接口)的硬件可以支持GPT  Boot Legacy


通常使用的分區工具:

fdisk:

用於創建和管理MBR分區,對於一塊硬盤,最多隻能管理15個分區;


gdisk:GNU disk

用於創建和管理GPT分區,


如果使用fdisk或gdisk命令對於已經有分區並掛載的磁盤的剩餘空間進行再次分區,分區的信息即便是保存了,也不會被內核重新讀取;如果要讓內核識別此類分區:

1.重啓計算機;

2.partprobe命令或者partx命令,強制內核重讀分區表;

CentOS5/7:partprobe -a [device] 如果省略了設備名,則表示重讀所有磁盤的分區表

CentOS6/7:partx -a [device]

kpartx -af [device]


fdisk分區示例:

fdisk - Partition table manipulator for Linux


fdisk -l [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:GNU

高級分區工具,實時生效;

parted - a partition manipulation program


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


parted /dev/sdb mklabel gpt|msdos

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


回顧:

機械式硬盤的基本術語和工作原理


使用新硬盤

分區

創建文件系統——格式化

掛載


分區方法:

fdisk parted


partprobe  partx -a device


創建文件系統:

FHS /bin /dev /etc

權限

文件的命名規則


爲什麼要創建文件系統?

一百萬冊圖書

平面分類管理

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

空間分類管理

門類

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


創建文件系統實際上就是給分區進行存儲空間的邏輯編址;


格式化:

低級格式化:

物理層面完成格式化,在磁盤設備出廠時,通過低級格式化來創建磁道;

主要作用:劃分磁道


高級格式化:

分區之後進行,

主要作用:用來創建文件系統,爲分區構建邏輯編址單元,簇,塊

無論是簇還是塊,都是將一個或多個扇區組織在一起,共同完成數據存儲;

簇: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(良好的反刪除功能)

btrfs(技術預覽版)


光盤文件系統: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.ext3, fsxk.ext3, fsck.ext4, fsck.xfs, ...


文件系統屬性查看工具

dumpe2fs


文件系統的屬性調整工具

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;

-j:創建有日誌功能的文件系統,就是ext3

-N number-of-inodes:直接指明要給此文件系統創建的inode的數量;

-m reserved-blocks-percentage:指定爲超級用戶root預留的磁盤空間的百分比;默認是5;

-t fstype:指定文件系統類型,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;

-m reserved-blocks-percentage:修改爲超級用戶預留的磁盤空間的百分比;

-o [^]mount-options[,...]:修改文件系統的默認掛載選項;

-r reserved-blocks-count:修改爲超級用戶預留的磁盤空間的塊的數量;

-L volume-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:readonly,以只讀的方式掛載目標文件系統;光盤

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

-n:默認情況下,設備掛載或卸載的操作會同步更新到/etc/mtab中,如果在掛載時使用了-n選項,則表示我們要禁用此特性,即便掛載成功,也不會更新到/etc/mtab中。

-t vsftype:指明要掛載的設備上創建的文件系統類型;如果省略該選項,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

loop:使用環回設備;將鏡像文件掛載到掛載點;


defaults,ro,nosuid

-B, --bind:將某個目錄綁定至另一個目錄;

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


卸載文件系統:

umount mount_point|device


掛載光盤:

1.保證光盤鏡像文件放入虛擬機光驅

2.保證光驅處於"已連接"狀態

3.創建光盤掛載點,mount -r /dev/sr0 mount_point


掛載U盤:

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


掛載交互分區:

swapon, 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:最低優先級自檢


Linux系統中常有的壓縮和解壓縮工具:

壓縮:以時間換空間的一種操作;

壓縮的原理:標記和替換



壓縮比:壓縮之前與壓縮之後的文件的大小的比值;

純文本文件壓縮比較大

視頻、圖像等文件壓縮比小


能夠實現壓縮功能的工具:

compress/uncompress:.Z擴展名

gzip/gunzip:.gz擴展名

bzip2/bunzip2:.bz2擴展名

xz/unxz:.xz擴展名,目前壓縮比最高的工具

zip/unzip:.zip擴展名


gzip:

gzip, gunzip, zcat - compress or expand files

-d:解壓縮

-#:以指定的壓縮比進行壓縮,1-9,9爲最高級;默認6

-c:將壓縮結果輸出到標準輸出,不會對原文件進行壓縮;

gzip -c /PATH/TO/FILE > /PATH/TO/COMPRESS_FILE.gz


bzip2:

bzip2, bunzip2 - a block-sorting file compressor, v1.0.4

  bzcat - decompresses files to stdout

  -d:解壓縮

  -#:指定壓縮比進行壓縮,1-9,默認爲6

  -k:保留原文件不刪除,創建新的壓縮文件;


xz:

xz, unxz, xzcat - Compress or decompress .xz files

-d:解壓縮

  -#:指定壓縮比進行壓縮,1-9,默認爲6

  -k:保留原文件不刪除,創建新的壓縮文件;


tar:歸檔程序

tar——tape archive:磁帶檔案

tar [OPTION...] [FILE]...

主選項:

-c:創建檔案文件

-x:釋放檔案文件的內容

-t:查看檔案文件中包含的文件

-u/-r:向檔案文件中添加新的文件


輔助選項:

-f:指定檔案的文件的路徑

-C:在釋放檔案文件中的內容時,指定釋放的路徑;

-z:在創建檔案文件時,調用gzip進行壓縮

-j:在創建檔案文件時,調用bzip2進行壓縮

-J:在創建檔案文件時,調用xz進行壓縮(可能不支持)

--exclude:在釋放檔案文件時,排除某個文件;

-k:在釋放檔案文件時,不會覆蓋同名文件;


cpio


寫一個腳本:給腳本傳遞幾個文件,選擇壓縮方式進行壓縮;

#!/bin/bash

#

read -p "Please input some files:" file

select I in gzip bzip2 xz ; do

 case $I in 

   gzip)

     gzip file

     ;;

   bzip2)

     bzip2 file

     ;;

   xz)

     xz file

     ;;

   *)

     echo "Input again some files:"

     ;;

 esac

done


#!/bin/bash

#

filedest=/usr/bin/file

read -p "Please input some files:" file1 file2 file3 file4

select I in gzip bzip2 xz ; do

 case $I in 

   gzip)

     tar -czf ${filedest}.tar.gz file1 file2 file3 file4

     ;;

   bzip2)

     tar -cjf ${filedest}.tar.bz2 file1 file2 file3 file4 

     ;;

   xz)

     tar -cJf ${filedest}.tar.xz file1 file2 file3 file4

     ;;

   *)

     echo "Input again some files:"

     ;;

 esac

done



/etc/issue /etc/init.d /etc/java /etc/yum


file.tar


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章