磁盤管理

 磁盤管理

 1 磁盤的結構

 設備文件

    I/O Ports: I/O設備地址 ? 一切皆文件: open(), read(), write(), close() ? 設備類型: 塊設備:block,存取單位“塊”,磁盤 字符設備:char,存取單位“字符”,鍵盤 ? 設備文件:關聯至一個設備驅動程序,進而能夠跟與之對應 硬件設備進行通信 ? 

    設備號碼: 

            主設備號:major number, 標識設備類型 

            次設備號:minor number, 標識同一類型下的不同設備

  硬盤接口類型

 并行: IDE:133MB/s SCSI:640MB/s ? 

 串口: SATA:6Gbps SAS:6Gbps USB:480MB/s ?

        rpm: rotations per minute

        磁盤設備的設備文件命名:/dev/DEV_FILE ?

        IDE: /dev/hd ?

        SCSI, SATA, SAS, USB: /dev/sd 

            不同設備:a-z /dev/sda, /dev/sdb, … ? 

        同一設備上的不同分區:1,2, … 

                     /dev/sda1, /dev/sda5

硬盤存儲術語

head:磁頭 ?

track:磁道 ?

cylinder: 柱面 ?

secotr: 扇區,512bytes

磁盤分區

使用分區空間

? 設備識別 ? 

   設備分區 ? 

   創建文件系統 ? 

   標記文件系統 ? 

   在/etc/fstab文件中創建條目 ? 

   掛載新的文件系統

為什么要分區? 

 1優化I/O性能  

 2實現磁盤空間配額限制 

 3提高修復速度 

 4隔離系統和程序 

 5安裝多個OS

 分區種類

? 兩種分區方式:

MBR,GPT ?

MBR: Master Boot Record,1982年,使用32位表示扇區 數,分區不超過2T ? 

如何分區:按柱面 ?

0磁道0扇區:

    512bytes 

    446bytes: boot loader 64bytes:分區表 

    16bytes: 標識一個分區 

    2bytes: 55AA ?

4個主分區;3主分區+1擴展(N個邏輯分區)

GPT分區 

GPT:GUID patition table 支持128個分區,使用64位,支 持8Z( 512Byte/block )64Z ( 4096Byte/block) ? 使用128位UUID 表示磁盤和分區 GPT分區表自動備份在頭 和尾兩份,并有CRC校驗位 ?UEFI (統一擴展固件接口)硬件支持GPT

管理分區

列出塊設備 

blkid ? 

創建分區使用: 

  fdisk 創建MBR分區,也支持GPT,對于一塊硬盤,最多只能管 理15分區 

  gdisk 創建GPT分區   GNU parted 高級分區操作(創建、復制、調整大小等等) ?partprobe-重新設置內存中的內核分區表版本

分區工具fdisk和gdisk 

fdisk /dev/sdb ?

gfisk /dev/sdb ?

fdisk -l [-u] [device…] ? 

子命令: ? 

p 分區列表 ? 

t 更改分區類型 ? 

n 創建新分區 ? 

d 刪除分區 ? 

w 保存并退出 ? 

q 不保存并退出 

同步分區表

查看內核是否已經識別新的分區: 

    cat /proc/partations ? 

通知內核重新讀取硬盤分區表 

      新增分區用 

       partx -a -n M:N /dev/DEVICE 

       kpartx -a /dev/DEVICE -f: force 

刪除分區用 

  partx -d -n M:N /dev/DEVICE 

      centos6: –nr N-M ?

      CentOS 5,7: 使用partprobe ?

partprobe [/dev/DEVICE]

parted命令 ?parted的操作都是實時生效的,小心使用 ? 

用法:parted [選項]… [設備 [命令 [參數]…]…] 

     

     parted /dev/sdb mklabel gpt|msdos 

     parted /dev/sdb print 

     parted /dev/sdb mkpart primary 1 200 (默認M) 

     parted /dev/sdb rm 1 

     parted -l

 文件系統

? 文件系統是操作系統用于明確存儲設備或分區上的文件的方 法和數據結構;即在存儲設備上組織文件的方法。操作系統 中負責管理和存儲文件信息的軟件結構稱為文件管理系統, 簡稱文件系統。 ? 

從系統角度來看,文件系統是對文件存儲設備的空間進行組 織和分配,負責文件存儲并對存入的文件進行保護和檢索的 系統。具體地說,它負責為用戶建立文件,存入、讀出、修 改、轉儲文件,控制文件的存取,安全控制,日志,壓縮, 加密等。

文件系統類型

?Linux文件系統: ext2, ext3, ext4, xfs(SGI), btrfs( Oracle), reiserfs, jfs(AIX), swap 

    swap: 交換分區 

    光盤:iso9660 ?

Windows:fat32, ntfs ?

Unix: FFS(fast), UFS(unix), JFS2 ? 

網絡文件系統:NFS, CIFS ? 

集群文件系統:GFS2, OCFS2(oracle) ? 

分布式文件系統:ceph, moosefs, mogilefs, glusterfs, Lustre ?

RAW:未經處理或者未經格式化產生的文件系統

文件系統分類

? 根據其是否支持"journal"功能: 

    日志型文件系統: ext3, ext4, xfs, … 

    非日志型文件系統: ext2, vfat ? 

文件系統的組成部分: 

    內核中的模塊:ext4, xfs, vfat 

    用戶空間的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat ?

Linux的虛擬文件系統:VFS ? 

查前支持的文件系統:cat /proc/filesystems

創建文件系統

?mkfs命令: 

(1) mkfs.FS_TYPE /dev/DEVICE 

    ext4 

    xfs 

    btrfs 

    vfat 

(2) mkfs -t FS_TYPE /dev/DEVICE 

    -L 'LABEL': 設定卷標

創建ext文件系統 ?mke2fs:ext系列文件系統專用管理工具 

    -t {ext2|ext3|ext4} 

    -b {1024|2048|4096} 

    -L 'LABEL' 

    -j: 相當于 

    -t ext3 mkfs.ext3 = mkfs -t ext3 = mke2fs 

    -j = mke2fs -t ext3 

    -i : 為數據空間中每多少個字節創建一個inode;此大 小不應該小于block的大小 

    -N :為數據空間創建個多少個inode 

    -I 一個inode記錄大小128—4096 -m #: 默認5%,為管理人員預留空間占總空間的百分比 

    -O FEATURE[,…]:啟用指定特性 

    -O ^FEATURE:關閉指定特性

文件系統標簽

? 指向設備的另一種方法 ? 

與設備無關 ?

blkid:塊設備屬性信息查看 

blkid [OPTION]… [DEVICE] 

    -U UUID: 根據指定的UUID來查找對應的設備 

    -L LABEL:根據指定的LABEL來查找對應的設備 ?

e2label:管理ext系列文件系統的LABEL 

    e2label DEVICE [LABEL] ?

findfs :查找分區 

    findfs [options] LABEL=<label> 

    findfs [options] UUID=<uuid>

tune2fs

tune2fs:重新設定ext系列文件系統可調整參數的值 

  -l:查看指定文件系統超級塊信息;super block 

  -L 'LABEL':修改卷標 

  -m :修預留給管理員的空間百分比 

  -j: 將ext2升級為ext3 

  -O: 文件系統屬性啟用或禁用, 

  –O ^has_journal 

  -o: 調整文件系統的默認掛載選項,

  –o ^acl -U UUID: 修改UUID號 ?dumpe2fs: 

  -h:查看超級塊信息(分組信息),分區用分組管理

文件系統檢測和修復

? 常發生于死機或者非正常關機之后 ? 

掛載為文件系統標記為“dirty” ?

fsck: File System Check 

fsck.FS_TYPE 

fsck -t FS_TYPE 

    -a: 自動修復錯誤 

    -r: 交互式修復錯誤 ? 

注意: FS_TYPE一定要與分區上已經文件類型相同; ?

e2fsck:ext系列文件專用的檢測修復工具 

    -y:自動回答為yes 

    -f:強制修復

掛載mount ? 

掛載:將額外文件系統與根文件系統某現存的目錄建立起關聯 關系,進而使得此目錄做為其它文件訪問入口的行為 ? 卸載:為解除此關聯關系的過程 ? 

把設備關聯掛載點:mount Point mount ? 

卸載時:可使用設備,也可以使用掛載點 umount ? 

掛載點下原有文件在掛載完成后會被臨時隱藏 ? 掛載點目錄一般為空

用mount命令掛載文件系統 ? 

掛載方法:mount DEVICE MOUNT_POINT ?

mount:通過查看/etc/mtab文件顯示當前已掛載的所有設備 ?

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

        device dir device:指明要掛載的設備; 

  (1) 設備文件:例如/dev/sda5 

  (2) 卷標:-L 'LABEL', 

      例如 -L 'MYDATA' 

  (3) UUID, -U 'UUID':

      例如 -U '0c50523c-43f145e7-85c0-a126711d406e' 

  (4) 偽文件系統名稱:proc, sysfs, devtmpfs, configfs 

      dir:掛載點 

      事先存在;建議使用空目錄 

      進程正在使用中的設備無法被卸載

mount常用命令選項 ?

  -t vsftype:指定要掛載的設備上的文件系統類型 ?

  -r: readonly,只讀掛載 ?

  -w: read and write, 讀寫掛載 ?

  -n: 不更新/etc/mtab,相當于#mount ?

  -a:自動掛載所有支持自動掛載的設備(定義在了/etc/fstab 文件中,且掛載選項中有auto功能) ?

  -L 'LABEL': 以卷標指定掛載設備 ?

  -U 'UUID': 以UUID指定要掛載的設備 ?

  -B, –bind: 綁定目錄到另一個目錄上 ? 

查看內核追蹤到的已掛載的所有設備: cat /proc/mounts

mount常用命令選項

? -o options:(掛載文件系統的選項),多個選項使用逗號分隔 

      async:異步模式 

      sync:同步模式,內存更改時,同時寫磁盤 

      atime/noatime:包含目錄和文件 

      diratime/nodiratime:目錄的訪問時間戳 

      auto/noauto:是否支持自動掛載,是否支持-a選項 

      exec/noexec:是否支持將文件系統上運行應用程序 

      dev/nodev:是否支持在此文件系統上使用設備文件 

      suid/nosuid:不否支持suid和sgid權限 

      remount:重新掛載 

      ro:只讀 

      rw:讀寫 

      user/nouser:是否允許普通用戶掛載此設備,默認管理員才能掛載 

      acl:啟用此文件系統上的acl功能 ? 

  Defaults:相當于rw, suid, dev, exec, auto, nouser, async

  卸載命令

查看掛載情況: 

    findmnt MOUNT_POINT ? 

查看正在訪問指定文件系統的進程: 

    lsof MOUNT_POINT 

    fuser -v MOUNT_POINT ? 

終止所有在正訪問指定的文件系統的進程: 

    fuser -km MOUNT_POINT ? 

卸載: 

     umount DEVICE 

     umount MOUNT_POINT

冒泡排序練習題:

1、輸入若干個數值存入數組中,采用冒泡算法進行升序或降序排序

#/bin/bash

declare -a rand

rand=($@)

i=$[${#rand[@]}-1]

for n in `seq 1 $i`

do

        for j in `seq 1 $i`

        do

                [ ${rand[$j]} -lt ${rand[$[$j-1]]} ] && c=${rand[$j]} && rand[$j]=${rand[$[$j-1]]} && rand[$[$j-1]]=$c

        done

done

echo ${rand[@]}

[root@localhost rpm]# /root/bin/maopao2.sh 2343 64 5 656 756758 56 4 356 261 284 8657 67 45 848

4 5 45 56 64 67 261 284 356 656 848 2343 8657 756758

2、編寫腳本/root/bin/copycmd.sh (1) 提示用戶輸入一個可執行命令名稱 (2) 獲取此命令所依賴到的所有庫文件列表 (3) 復制命令至某目標目錄(例如/mnt/sysroot)下的對應路徑下; 如:/bin/bash ==> /mnt/sysroot/bin/bash /usr/bin/passwd ==> /mnt/sysroot/usr/bin/passwd (4) 復制此命令依賴到的所有庫文件至目標目錄下的對應路徑下: 如:/lib64/ld-linux-x86-64.so.2 ==> /mnt/sysroot/lib64/ldlinux-x86-64.so.2 (5)每次復制完成一個命令后,不要退出,而是提示用戶鍵入新的要復制的命 令,并重復完成上述功能;直到用戶輸入quit退出

#!/bin/bash

 

ch_root="/mnt/sysroot"

[ ! -d $ch_root ] && mkdir $ch_root

 

bincopy() {

    if which $1 &>/dev/null; then

        local cmd_path=`which –skip-alias $1`

        local bin_dir=`dirname $cmd_path`

        [ -d ${ch_root}${bin_dir} ] || mkdir -p ${ch_root}${bin_dir}

        [ -f ${ch_root}${cmd_path} ] || cp $cmd_path ${ch_root}${bin_dir}

        return 0

    else

        echo "Command not found."

        return 1

    fi

}

 

libcopy() {

    local lib_list=$(ldd `which –skip-alias $1` | grep -Eo '/[^[:space:]]+')

    for loop in $lib_list;do

        local lib_dir=`dirname $loop`

        [ -d ${ch_root}${lib_dir} ] || mkdir -p  ${ch_root}${lib_dir}

        [ -f ${ch_root}${loop} ] || cp $loop ${ch_root}${lib_dir}

    done

}

 

 

read -p "Please input a command or quit: " command

 

while [ "$command" != "quit" ];do

    if bincopy $command ;then

        libcopy $command

    fi

    read -p "Please input a command or quit: " command

done

原創文章,作者:a1215276209,如若轉載,請注明出處:http://www.www58058.com/40144

(0)
a1215276209a1215276209
上一篇 2016-08-26
下一篇 2016-08-26

相關推薦

  • linux文件系統

      ?文件系統: linux區分大小寫: ? ? ? ? ? ? ? ? ? ?標準的linux文件系統xfs ext(如ext4),嚴格區分大小寫,例:MAIL,Mail,mail;而windows是不那么敏感的。 這是因為文件系統的格式不同。比如:U盤的Fat32在linux中是vfat文件系統就可不區分大小寫 不同文件系統,下面顯示一個隱藏文…

    Linux干貨 2017-11-19
  • 任務計劃

                          Linux任務計劃 一、任務計劃     (1)未來的某一個時間點執行一次某任務:at、batch     (2)周期性運行某…

    2017-05-14
  • Linux文本處理三劍客之sed

    處理文本工具sed sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒有改變,除非你使用重定向存儲輸出。Sed主要用來自動編輯一個或多個文件,簡化對文…

    Linux干貨 2016-08-15
  • MySQL基礎入門詳解

    MySQL MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB 公司開發,目前屬于 Oracle 旗下公司。MySQL 最流行的關系型數據庫管理系統,在 WEB 應用方面MySQL是最好的 RDBMS (Relational Database Management System,關系數據庫管理系統) 應用軟件之一。 想要使用MySQL來存儲并操作數…

    2017-09-16
  • 系統啟動和內核管理

    Linux組成 Linux:kernel+rootfs kernel:進程管理、內存管理、網絡管理、驅動程序、文件系統、安全功能 rootfs:程序和glibc 庫:函數集合,function,調用接口(頭文件負責描述) 過程調用:procedure,無返回值; 函數調用:function;有返回值,可以賦值于變量中; 程序:二進制執行文件 包括根目錄以及包…

    Linux干貨 2017-05-14
  • shell中的位置參數變量

    要了解位置變量,首先要知道什么是變量?  變量就是讓某一個特定的字符串來代表不固定的內容,簡單理解就是用一個簡單的“字眼”來替代另一個比較復雜或者容易變動的數據。 而什么又是位置變量呢?  位置變量就是bash將傳遞給腳本的參數,按照位置不同,保存在不同的位置變量中,以便于腳本調用這些變量。 位置參數變量: $1, $2, ……

    Linux干貨 2016-08-12
欧美性久久久久