關于 磁盤、文件系統管理

               磁盤、文件系統管理
              

1  設備識別
2  設備分區
3  創建文件系統
4  標記文件系統
5  在/etc/fstab文件中創建條目

掛載新的文件系統
7  為什么是分區?
8  優化I/O性能
9  實現磁盤空間配額限制
10 提高修復速度
11
隔離系統和程序
12 安裝多個OS
13 采用不同文件系統

兩種分區方式MBR和GPT
MBR: Master Boot
Record,1982年,使用32位表示扇區數,分區不超過2T
如何分區:按柱面
0磁道0扇區:512bytes
446bytes: boot
loader
64bytes:分區表
16bytes: 標識一個分區
2bytes:
55AA
4個主分區;3主分區+1擴展(N個邏輯分區)
GPT:GUID(Globals Unique Identifiers)partition
table
支持128個分區,使用64位,支持8Z(512Byte/block )64Z (4096Byte/block)

使用128位UUID 表示磁盤和分區GPT分區表自動備份在頭和尾兩份,并有CRC校驗位

UEFI (統一擴展固件接口)硬件支持GPT,使操作系統啟動
              
列出塊設備:
          
lsblk
           ls /dev/sd*
           cat /proc/partitions

創建分區使用:
fdisk創建MBR分區,也支持GPT,對于一塊硬盤,最多只能管理15分區
gdisk創建GPT分區, 跟fdisk
差不多
GNU parted高級分區操作(創建、復制、調整大小等等)
        

查看磁盤分區情況:
[root@Compro ~]# fdisk -l /dev/sda  
[root@Compro ~]# fdisk
/dev/sdb
gfisk /dev/sdb 類fdisk 的GPT分區工具
fdisk -l [-u]
[device…]
子命令:
      p 分區列表
      t 更改分區類型
      n 創建新分區
     
d 刪除分區
      w 保存并退出
      q 不保存并退出
     
     

掃描磁盤
新添加硬盤加載到當前系統:
~]# echo  "- – -">
/sys/class/scsi_host/host2/scan
查看塊設備:
~]# lsblk 
查看mbr:
~]#
hexdump -C -n 512 /dev/sda  查看磁盤二進制字節
備份mbr :         
[root@Compro ~]#
dd if=/dev/sda of=/testdir/mbrbak bs=1 count=512
                  if讀取文件路徑
of 輸出文件路徑到哪個地方
記錄了512+0 的讀入
記錄了512+0 的寫出
512字節(512 B)已復制,0.0104854
秒,48.8 kB/秒

查看是否成功:
[root@Compro ~]# hexdump -C -v /testdir/mbrbak

 

通知內核重新讀取硬盤分區表
新增分區用:
partx -a /dev/sdb
kpartx -a /dev/sdb -f:
force

刪除分區用:
centOS6: -n  –nr <n:m> 指定分區范圍(例如:–nr 2:4)
partx -d
/dev/sdb
CentOS7: 使用partprobe
~]# partprobe /dev/sdb

parted的操作都是實時生效,小心使用
用法:parted [選項]… [設備[命令[參數]…]…]
parted
/dev/sdbmklabelgpt|msdos          [root@Compro ~]# parted /dev/sdb mklabel gpt  
更改磁盤標簽類型
parted /dev/sdbprint
parted /dev/sdbmkpartprimary 1 200
(默認M)
parted /dev/sdbrm1            [root@Compro ~]# parted /dev/sdb rm 1   
刪除1分區
parted -l /dev/sdbrm1         在所有塊設備列表分區布局

 

文件系統分類:
常用的linux文件系統:ext2,ext3,ext4,xfs,btrfs,reiserfs,jfs,swap
交換文件系統:swap
網絡文件系統:nfs
, smbfs
集群文件系統:GFS ,
OCFS
分布式文件系統:ceph,moosefs,mogilefs,glusterfs,lunster
未經處理或者未經格式化產生的文件系統:
RAW
光盤文件系統:isso96600

根據其是否支持日志功能還可分為:
 日志型文件系統:ext3,etx4,xfs
 非日至類型文件系統:ext2,vfat
 
 文件系統的組成部分:
 
內核中的模塊:ext4,xfs,vfat
  用戶空間的管理工具:mkfs.ext4 , mkfs.xfs , mkfs.vfat
 
linux的虛擬文件系統:VFS
  查看當前支持的文件系統: cat/proc/filesystems

創建文件系統
mkfs命令   # mkfs. 類型 /dev/sda
用法:
     mkfs [選項] [-t
<類型>] [文件系統選項] <設備> [<大小>]
                  
ext4
                   xfs
                   btrfs
                  
vfat
                   選項:
 -t, –type=<類型>  文件系統類型;若不指定,將使用
ext2
     fs-options     實際文件系統構建程序的參數
     <設備>        
要使用設備的路徑
     <大小>         要使用設備上的塊數
[root@Compro ~]# mkfs -t ext4
/dev/sdb1
[root@Compro ~]# mkfs -L 類型 /dev/sdb1    設定卷標
              

mke2fs ext系列文件系統專用 管理工具
[root@Compro ~]# mke2fs -t ext2 /dev/sdb1 
{ext|2|ext3|ext4}
[root@Compro ~]# mke2fs -b 1024 /dev/sdb1 
{1024|2048|4096}      指定塊大小
[root@Compro ~]# mke2fs -L /mnt/sdb1 /dev/sdb
設定卷標類型 一般設定掛載點為卷標名
[root@Compro ~]# mke2fs -j /dev/sdb1     相當于 -t ext3 

[root@Compro ~]# mke2fs -i # /dev/sdb1  
#為數字;為數據空間中每多少個字節創建一個inode;此大小不應該小于block的大小
[root@Compro ~]# mke2fs -N #
/dev/sdb1   #為數字;為數據空間創建個多少個inode節點表
[root@Compro ~]# mke2fs -I 128
/dev/sdb   修改inode記錄大小128—4096 
[root@Compro ~]# mke2fs -m # /dev/sdb1  
#為數字; 默認5%,為管理人員預留空間占總空間的百分比
[root@Compro ~]# mke2fs -O has_journal
/dev/sdb1    啟用指定特性   啟用日志功能,也可以啟動別的特性
[root@Compro ~]# mke2fs -O
^has_journal /dev/sdb1   關閉指定特性   關閉了日志功能 ,也可以關閉其它特性

 
指向設備的另一種方法;與設備無關
[root@Compro ~]# blkid       塊設備屬性信息查看  

[root@Compro ~]# blkid [選項]… [設備]
[root@Compro ~]# blkid -U UUID:
根據指定的UUID來查找對應的設備
[root@Compro ~]# blkid -L ext3  根據指定的標簽來查找對應的設備

[root@Compro ~]# e2label /dev/sdb1 ext2 :管理ext系列文件系統的標簽 
            格式
e2label DEVICE [LABEL]

tune2fs:重新設定ext系列文件系統可調整參數的值
[root@Compro ~]# tune2fs -l /dev/sdb1  
查看指定文件系統超級塊信息;super block
[root@Compro ~]# tune2fs -l /dev/sdb1  
修改卷標
[root@Compro ~]# tune2fs -m # /dev/sdb1 
#為數字;修改預留給管理員的空間百分比
[root@Compro ~]# tune2fs -j /dev/sdb1  
將ext2升級為ext3
[root@Compro ~]# tune2fs -O has_journal /dev/sdb1 文件系統屬性啟用或禁用
啟用日志功能,也可以啟動別的特性  
[root@Compro ~]# tune2fs -O ^has_journal /dev/sdb1  
關閉指定特性   關閉了日志功能 ,也可以關閉其它特性
[root@Compro ~]# tune2fs -o acl /dev/sdv1  
調整文件系統的默認掛載選項
[root@Compro ~]# tune2fs -o ^acl /dev/sdv1     

[root@Compro ~]# tune2fs -U UUID    修改UUID號
[root@Compro ~]#
uuidgen            隨機生成UUID
[root@Compro ~]# dumpe2fs -h /dev/sdb1
查看超級塊信息(分組信息),分區用分組管理  同tune2fs -l 一樣

常發生于死機或者非正常關機之后
掛載為文件系統標記為“dirty”
fsck: File System Check 
文件系統校驗
[root@Compro ~]# fsck.文件類型
[root@Compro ~]# fsck
/dev/sdb1
[root@Compro ~]# fsck -y /dev/sdb1   自動回答為yes
[root@Compro ~]#
fsck -t 文件類型
[root@Compro ~]# fsck -a /dev/sdb1自動修復錯誤
[root@Compro ~]#
fsck -r /dev/sdb1 交互式修復錯誤
注意:
文件類型一定要與分區上已經文件類型相同;
e2fsck:ext系列文件專用的檢測修復工具
-y:自動回答為yes
-f:強制修復 

文件系統的掛載
掛載mount
掛載:將額外文件系統于根文件系統某現存的目錄建立起關聯關系,
     
進而使得此目錄作為其他文件訪問入口的行為
卸載:解除此關聯關系的過程
把設備關聯掛載點:mount
Point
卸載時:可使用設備,也可以使用掛載點 umount
掛載點下原有文件在掛載完成后會被臨時隱藏
掛載點目錄一般為空

掛載工具mount的使用
mount 設備
安裝指向
設備:所奧掛載的磁盤分區
安裝指向掛載點:另一個文件系統的訪問入口
mount
通過查看/etc/mtab文件顯示當前已經掛載的所有設備
固定掛載點:/mnt,/media
mount [選項]…[-t 文件類型] [-o
選項]設備 掛載點
掛載點需要具備以下兩點:1事先存在 2使用空閑目錄
進程正在使用中的設備無法被卸載
[root@Compro ~]#
mount /dev/sdb1 /testdir/     將磁盤掛載到testdir目錄下
常用掛載選項:
      -t
指定文件系統類型
      -r 只讀掛載
      -w 讀寫掛載
      -L 以卷標方式指定設備,
      -U
以UUID的方式指定設備,例如 mount -U UUID 掛載點
      -a
自動掛載所有(/etc/fstab文件中定義的)的支持自動掛載設備
      -n 掛載時,不更新/etc/mtab文件
      -B
綁定目錄到另一個目錄上
      cat /proc/mounts  查看內核追蹤到的已經掛載的所有設備
偽文件系統名稱:proc, sysfs,
devtmpfs, configfs

        -o 選項:(掛載文件系統的選項)
        async:異步模式
       
sync:同步模式,內存更改時,同時寫磁盤
        atime/noatime:包含目錄和文件
       
diratime/nodiratime:目錄的訪問時間戳
        auto/noauto:是否支持自動掛載,是否支持-a選項
       
exec/noexec:是否支持將文件系統上運行應用程序
        dev/nodev:是否支持在此文件系統上使用設備文件
       
suid/nosuid:不否支持suid和sgid權限
        remount:重新掛載
        ro:只讀
       
rw:讀寫
        user/nouser:是否允許普通用戶掛載此設備,默認管理員才能掛載
       
acl:啟用此文件系統上的acl功能
注意:上述選項可多個同時使用,彼此之間使用逗號分隔
      默認掛載選項:rw, suid, dev,
exec, auto, nouser, async

查看掛載情況:
[root@Compro ~]# findmnt /dev/sda1

查看正在訪問指定文件系統的進程:
[root@Compro ~]# lsof /dev
[root@Compro ~]# fuser -v
/dev/
終止所有在正訪問指定的文件系統的進程:
[root@Compro ~]# fuser -km /dev/   
善用此命令
卸載:
umount 設備
umount 指明安裝路徑

 

設備自動掛載
配置文件系統:/etc/fstab
被mount、fsck和其它程序使用
系統重啟是保留文件系統卷標
可以在設備欄使用文件系統卷標
使用mount
-a 命令掛載/etc/fstab中的所有文件系統

/etc/fstab每行定義一個要掛載的文件系統;
要掛載的設備或偽文件系統
掛載點
文件系統類型
掛載選項
轉儲頻率
自檢次序
要掛載的設備或偽文件系統:
設備文件、LABEL(LABEL="")、UUID(UUID="")、偽文件系統名稱(proc,
sysfs)
掛載選項:defaults
轉儲頻率:
         0:不做備份
        
1:每天轉儲
         2:每隔一天轉儲
自檢次序:
         0:不自檢
        
1:首先自檢;一般只有rootfs才用1

處理交換文件和分區
交換分區是系統RAM的補充
基本設置包括:
創建交換分區或者文件
使用mkswap寫入特殊簽名
在/etc/fstab文件中添加適當的條目
使用swapon
-a 激活交換空間

掛載交換分區
啟用:swapon
swapon [OPTION]… [DEVICE]
        
-a:激活所有的交換分區;
         -p
PRIORITY:指定優先級
/etc/fstab:pri=value
禁用:swapoff [OPTION]… [DEVICE]

SWAP的優先級
用戶可以給某個swap指定一個0到32767的優先級
如果用戶沒有指定,那么核心會自動給swap指定一個優
先級,這個優先級從-1開始,每加入一個新的沒有用戶
指定優先級的swap,會給這個優先級減一。
先添加的swap的缺省優先級比較高,除非用戶自己指定
一個優先級,而用戶指定的優先級(是正數)永遠高于核心
缺省指定的優先級(是負數)。
優化性能:分布存放,高性能磁盤存放

移動介質
掛載意味著使外來的文件系統看起來如同是主目錄樹的一部分
訪問前、介質必須被掛載
摘除時,介質必須被卸載
按照默認設置,非根用戶只能掛載某些設備(光盤、DVD、軟
盤、USB等等)
掛載點通常在/media
或/mnt下

使用光盤
在圖形環境下自動啟動掛載/run/media/<user>/<label>
否則就必須被手工掛載
mount
/dev/cdrom/mnt/
eject命令卸載或彈出磁盤
創建ISO文件
cp/dev/cdrom/root/centos7.iso
mkisofs
-r -o /root/etc.iso /etc
刻錄光盤
wodim–v –eject centos.iso

掛載USB介質
被內核探測為SCSI設備
/dev/sdaX、/dev/sdbX、或類似的設備文件
手動掛載
mount
/dev/sdb1 /mnt

常見工具
內存空間使用狀態:
                free [OPTION]
                      
-m: 以MB為單位
                       -g:
以GB為單位
文件系統空間占用等信息的查看工具:
            df [OPTION]…
[FILE]…
               -H 以1000為單位
             -T
文件系統類型
                -h: human-readable
                      
-i:inodesinstead of blocks
                       -P:
以Posix兼容的格式輸出
查看某目錄總體空間占用狀態:
          du [OPTION]… DIR
            
-h: human-readable
              -s: summary
工具dd
dd命令:convert and copy
a file
用法:
     ddif=/PATH/FROM/SRC of=/PATH/TO/DEST
       bs=#:block
size, 復制單元大小
    count=#:復制多少個bs
       of=file寫到所命名的文件而不是到標準輸出
      
if=file從所命名文件讀取而不是從標準輸入
       bs=size指定塊大?。仁鞘莍bs也是obs)
     
ibs=size一次讀size個byte
      obs=size 一次寫size個byte
      cbs=size
一次轉化size個byte
     skip=blocks從開頭忽略blocks個ibs大小的塊
    
seek=blocks從開頭忽略blocks個obs大小的塊
    count=n只拷貝n個記錄
    
conv=conversion[,conversion…] 用指定的參數轉換文件。
轉換參數:
        ascii 轉換EBCDIC
為ASCII
        ebcdic 轉換ASCII 為EBCDIC
        block 轉換為長度為cbs
的記錄,不足部分用空格填充。
        unblock 替代cbs長度的每一行尾的空格為新行
        lcase
把大寫字符轉換為小寫字符
        ucase 把小寫字符轉換為大寫字符
        swab 交換輸入的每對字節
       
noerror 出錯時不停止
        notrunc 不截短輸出文件
        sync
把每個輸入塊填充到ibs個字節,不足部分用空(NUL)字符補齊
磁盤拷貝:
        
ddif=/dev/sdaof=/dev/sdb
備份MBR:
        ddif=/dev/sdaof=/tmp/mbr.bakbs=512
count=1
破壞MBR中的bootloader:
        ddif=/dev/zero of=/dev/sdabs=64 count=1
seek=446
      
有一個大與2K的二進制文件fileA?,F在想從第64個字節位置開始讀取,需要讀取的大小是128Byts
。
又有fileB,
想把上面讀取到的128Bytes寫到第32個字節開始的位置,替換128Bytes,請問如何實現?
 #ddif=fileAof=fileBbs=1
count=128 skip=63 seek=31 conv=notrunc

備份:
    dd if=/dev/sdx of=/dev/sdy
   
將本地的/dev/sdx整盤備份到/dev/sdy
    dd if=/dev/sdx of=/path/to/image
   
將/dev/sdx全盤數據備份到指定路徑的image文件
    dd if=/dev/sdx | gzip
>/path/to/image.gz
    備份/dev/sdx全盤數據,并利用gzip工具進行壓縮,保存到指定路徑
恢復:
   
dd if=/path/to/image of=/dev/sdx
    將備份文件恢復到指定盤
    gzip -dc
/path/to/image.gz | dd of=/dev/sdx
    將壓縮的備份文件恢復到指定盤

 

拷貝內存資料到硬盤
      dd if=/dev/mem of=/root/mem.bin bs=1024 
     
將內存里的數據拷貝到root目錄下的mem.bin文件
從光盤拷貝iso鏡像
      dd if=/dev/cdrom
of=/root/cd.iso
      拷貝光盤數據到root文件夾下,并保存為cd.iso文件
銷毀磁盤數據
      dd
if=/dev/urandom of=/dev/sda1
      利用隨機的數據填充硬盤,在某些必要的場合可以用來銷毀數據。
     
執行此操作以后,/dev/sda1將無法掛載,創建和拷貝操作無法執行。

得到最恰當的block size
    dd if=/dev/zero bs=1024 count=1000000
of=/root/1Gb.file
    dd if=/dev/zero bs=2048 count=500000
of=/root/1Gb.file
    dd if=/dev/zero bs=4096 count=250000
of=/root/1Gb.file
    dd if=/dev/zero bs=8192 count=125000
of=/root/1Gb.file
通過比較dd指令輸出中所顯示的命令執行時間,即可確定系統最佳的block size大小

測試硬盤讀寫速度
    dd if=/root/1Gb.file bs=64k | dd of=/dev/null
    dd
if=/dev/zero of=/root/1Gb.file bs=1024
count=1000000
通過上兩個命令輸出的執行時間,可以計算出測試硬盤的讀/寫速度

 

修復硬盤
        dd if=/dev/sda of=/dev/sda
       
當硬盤較長時間(比如1,2年)放置不使用后,磁盤上會產生消磁點。
       
當磁頭讀到這些區域時會遇到困難,并可能導致I/O錯誤。當這種情況影響到硬盤的第一個扇區時,
       
可能導致硬盤報廢。上邊的命令有可能使這些數據起死回生。且這個過程是安全,高效的。

 

 

原創文章,作者:小馬哥,如若轉載,請注明出處:http://www.www58058.com/41838

(0)
小馬哥小馬哥
上一篇 2016-08-30
下一篇 2016-08-30

相關推薦

  • 在學習的過程中,我們應該如何獲取幫助?

    正文 在學習的過程當中,我們總是遇到不會使用的問題,以各種姿勢來獲取幫助是一個運維人員的基本要求 在Linux系統中我們獲取幫助主要有以下幾種方式 1. 使用命令內建的選項來獲取幫助 2. 使用man來查看命令使用手冊 3. 使用info來查看命令的信息頁 4. 查看軟件自帶的幫助文檔 5. 查看軟件官方的文檔 6. 查看發行版本的文檔 7. Google相…

    Linux干貨 2016-03-04
  • Linux下常用的日志收集命令(Redhat&SuSe)

       Linux下日志的采集和分析是一個非常重要的工作,一般廠商在你需要技術支持的時候,都需要你通過對應指令收集系統的信息,我這邊列舉下常用的兩個Linux廠商的收集命令(Redhat Linux以及SuSe Linux),便于收集后,對系統進行全面分析。   sosreport是一個類型于supportconfig …

    系統運維 2016-07-07
  • UML圖中類之間的關系:依賴,泛化,關聯,聚合,組合,實現

    類與類圖 1) 類(Class)封裝了數據和行為,是面向對象的重要組成部分,它是具有相同屬性、操作、關系的對象集合的總稱。 2) 在系統中,每個類具有一定的職責,職責指的是類所擔任的任務,即類要完成什么樣的功能,要承擔什么樣的義務。一個類可以有多種職責,設計得好的類一般只有一種職責,在定義類的時候,將類的職責分解成為類的屬性和操作(即方法)。 3) 類的屬性…

    Linux干貨 2015-04-07
  • MySQL慢日志監控腳本實例剖析

    原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://nolinux.blog.51cto.com/4824967/1577326        公司線上的 MySQL 慢日志,之前一直沒有做好監控。趁著上周空閑,我就把監控腳本寫了下,…

    Linux干貨 2016-08-15
  • Javascript 裝載和執行

    一兩個月前在淘寶內網里看到一個優化Javascript代碼的競賽,發現有不少的人對Javascript的執行和裝載的基礎并不懂,所以,從那天起我就想寫一篇文章,但一直耽擱了。自上篇《瀏覽器渲染原理簡介》,正好也可以承前啟后。 首先,我想說一下Javascript的裝載和執行。通常來說,瀏覽器對于Javascript的運行有兩大特性:1)載入后馬上執行,2)執…

    Linux干貨 2016-08-15
  • CMDB內功心法,助我登上運維之巔

    很多70、80后甚至90后都在金庸、古龍、梁羽生先生等武林大家熏陶下成長的,這么多年過去了,我的武俠夢依然不曾散去。曾幾何,夢想有一天練就一身絕學,摟著小師妹花前月下,仗劍走天涯,快意人生??擅看蔚暮ㄋ缐舳急话嘀魅未髸遄咏o抽醒,在他們的鞭策之下,渾渾噩噩的成了一位IT騷年。我們都知道武功分為內功和招式,內功是氣,而招式是形,以氣御形。內功深厚,會讓你的招…

    系統運維 2017-01-09

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-09-01 14:46

    寫的過于隨意,沒有自己的思路,同時對于一些專業的術語,能給出圖片來展示。也希望作者能多些操作。

欧美性久久久久