1. 程式人生 > >磁盤分區與格式化

磁盤分區與格式化

$1 當前 dst 共享 3.0 子節點 能力 格式化 create

常見的磁盤有光盤、U盤、硬盤、軟盤、磁帶機等其他磁盤,磁盤在出廠時會進行低級格式化,用來劃分磁盤邏輯結構,劃分磁道、扇區、磁盤屬性等

磁盤分區

分區 : partition 創建多個獨立的文件系統

MBR : master boot record 主引導記錄 :

第0磁道0扇區 512bytes : 446bytes : bootloader 引導加載器

64bytes : 每16個標識一個分區 共能標識4個分區

2bytes : magic number 標識MBR是否有效

磁盤分區格式化 :

/
/bin, /sbin : 二進制程序,/bin普通用戶使用的命令, /sbin 管理員使用的命令 ; 操作系統自身運行需要用到的程序
/usr/bin, /usr/sbin : 二進制程序, 基本的系統工具
/usr/local/bin, /usr/local/sbin : 第三方程序;
/lib
/usr/lib
/usr/local/lib
/etc
/tmp
/var
log
mail
cache
/proc : 內核映像
/sys : 硬件信息
/media
/mnt
/opt :
/boot : 引導目錄,內核
/home/USERNAME, /root:
/dev :
設備類型:
b : 隨機設備
c : 線性設備
硬盤設備 : 隨機存取設備
I/O, I/O Controller 集成的芯片叫控制器

I/O Adapter 非集成的芯片叫適配器
IDE, ATA : 並行, 133MBPS = 133/8 Mb/s
SCSI : small computer system interface, UItraSCSI 320MBPS = 320/8MB/s
10000,15000RPM 並行
SATA : Serail, 300MBPS, 600MBPS, 6GBPS 總線速度 串行
SAS :
USB : (1.1, 2.0, 3.0) 串行

USB3.0 480MBPS

SSD : Solid-State Disk 常用的也是接到SATA口或者USB口的

Linux, /dev/
IDE, ATA: /dev/hd[a-z]

IDE : Master, Slave
第一個IDE控制器接硬盤,
第二個IDE控制接光驅, hdc
SCSI, SAS, SATA, USB: /dev/sd[a-z]
/dev/sda, /dev/sdb

文件系統: 通常由內核提供
windows :
NTFS
FAT32
Linux:
ext2
ext3
ext4
xfs
reiserfs
nfs
iso9600
jfs
brtfs

對分區格式化, 就是創建文件系統
RAW : 裸設備
低級格式化: 創建磁盤,劃分磁道的
高級格式化: 創建文件系統
MBR: Master Boot Record
512bytes :
446bytes : bootloader
64bytes : 分區表, 其中每16bytes標識一個分區
2bytes : 標識當前硬盤是否可引導的 magic number

擴展分區:
再次劃分為邏輯分區

fdisk, sfdisk, part
fdisk <= 15分區
fdisk -l [DEVICE]
fdisk [DEVICE]
交互式命令 :
d : 刪除一個分區
n : 新建一個分區
p : 顯示當前的分區情況
w : 保存退出
q : 不保存退出
l : 各分區類型所對應的system ID
83 : linux
82 : linux swap
8e : LVM 邏輯卷
fd : soft raid
t : 修改指定分區的System ID

fdisk -l /dev/sda

查看內核識別的分區信息 : cat /proc/partitions
讓內核重新探測讀取硬件盤分區表 : partprobe

出現warning, 紅帽5上沒問題,紅帽6上要重啟
RHEL6讓內核重新讀取硬盤分區表 :
partx -a [partitions] DEVICE 明確添加某一個或者所有的盤

下一步,格式化分區,用於創建文件系統
linux, mkfs
mkfs -t fstype /dev/part

RHEL5 : 默認ext3
RHEL6 : 默認ext4

mkfs -t ext3 /dev/sda3
blkid dev/sda3 : 顯示設備的uuid及文件系統類型

mkfs -t ext4 = mkfs.ext4 = mke2fs -t ext4
mkfs -t ext3 = mkfs.ext3 = mke2fs -j = mke2fs -t ext3

mkfs -t ext2 = mkfs.ext2 = mke2fs = mke2fs -t ext2

配置文件 : /etc/mke2fs.conf : 用於設定默認特性,及文件系統特有的特性;

mke2fs -t {ext2|ext3|ext4}
-b {1024|2048|4096} : 塊大小
塊大小取決CPU對內存頁框大小的支持, x86系統默認頁框大小為4K;
-L label : 設定卷標
-m # : 預留給管理使用的塊所占總體空間的比例
-r # : 調整預留管理使用塊個數
-E : 調整文件系統擴展屬性

vim /etc/mke2fs.conf 可以定義文件類型

要顯示塊大小 :
tune2fs -l /dev/sda3 | grep ‘Block size‘
-l : 顯示文件系統超級塊信息
-L label : 設定卷標
-m : 設定預留管理使用塊所占總體空間的比例
-r # : 調整預留管理使用塊個數
-o : 設定默認掛載選項
-O : 設定文件系統默認特性
-E : 調整文件系統擴展屬性

e2label : 顯示或設定卷標
d2label DEVICE [Volume_label]

mke2fs -t ext3 -b 1024 -L MYDATA /dev/sda3

tune2fs -l /dev/sda3 | grep ‘Reserved‘ : 預留塊大小

掛載 : mount
mount [-t fstype] DEVICE MOUNT_POINT
mount [-t fstype] LABEL="卷標" MOUNT_POINT

mount: 當前系統掛載的所有設備

umount DEVICE
umount MOUNT_POINT

掛載之後,原有數據會被隱藏,因此不能掛載到系統常用目錄上
卸載之時, 要確保沒有進程正在訪問掛載的設備,否則,無法卸載

Track : 磁道
Sector : 扇區
Cylinder : 柱面

/etc/fstab : 系統開機會自動掛載的文件系統:

FileSystem:一個軟件, 內核中實現
windows:
NTFS,FAT32
Linux: vfs(virtual file system)
usi9660
nfs
cifs
ext2, ext3, ext4, xfs, jfs,reiserfs, vfat, GFS, GFS2, OCFS2

mount -t fstype [options] DEVICE MOUNT_POINT
DEVICE :
設備文件 : /dev/sda1, /dev/hdb2
卷標: LABEL="label"
UUID: UUID="uuid"
MOUNT_POINT:


blkid PARTITION

mkfs -t [fstype] PARTITION
要點: 1.文件系統必須被支持才能使用, 即內核相應的內核模塊, 或者已經將之整合進內核
2. 要有相應文件系統創建工具, 這通常是mkfs.fstype

mkfs -t ext2 = mkfs.ext2 = mke2fs
mkfs -t ext3 = mkfs.ext3 = mke2fs -j = mke2fs -t ext3
mkfs -t ext4 = mkfs.ext4 = mke2fs -t ext4

mkfs -t xfs = mkfs.xfs

mke2fs
-t
-L
-m
-b
-E

tune2fs
-l

e2label

mount
-o : 用於指定掛在選項,常用的掛載選項
ro : 只讀掛載
rw : 讀寫,默認即為讀寫
moatime : 關閉 更新 訪問時間
auto : 是否能夠由"mount -a"掛載
defaults : 相當於rw,suid, dev,exec,auto,nouser,async,and relatime
sync:同步寫入
async:異步寫入
dev : 允許啟用設備文件
remount : 重新掛載
loop : 本地回環設備

mount -o remount,other_options DEVICE

cdrom -->sr0
cdrom --> hdc

mount -o loop,other_options DEVICE MOUNT_POINT: 用於掛載回環設備

-n : 掛載文件系統時, 不更新/etc/mtab文件
-r : 相當於 ""-o ro",只讀掛載

fuser /media/
fuser -km /media/
umount /media/

fuser [MOUNT_POINT] :查看正在訪問某掛載點的進程
fuser -km [MOUNT_POINT] : 強行殺死正在訪問次掛載點的進程

/etc/fstab
掛載的設備 :
設備文件,卷標,uuid
掛載點 :
文件系統類型 : ext2,ext3,...
掛載選項: defaults 表示使用默認選項,多個選項之間逗號分隔
轉儲頻率 : dump
0: 從不備份
1: 每日備份
2: 每隔一天備份
自檢次序 :
0: 不檢測
1 : 第一個檢測 : 一般只有根文件系統被第一個檢測
2 :
9 :
mount -a : 掛載 /etc/fstab所有支持auto掛載選擇的文件系統

Linux的交換分區: swap

必須是獨立分區,獨立文件系統
交換分區多大?
科學計算類的服務器: 交換內存可以盡可能大, 比如為物理內存的2倍
應用程序類的服務器, 交換內存盡可能小, 比如只給1G

物理內存小於2G, swap=memory*2
2G<memory<4G swap=memory*1.5
memory>4G , swap=4G

如何查看內存大小
free
-m : 換算為MB
-g : 換算為GB
shared : 共享內存
buffer : 緩沖
cache : 緩存
創建交換分區 :
mkswap DEVICE

啟用交換分區 :
swapon DEVICE : 啟用指定交換分區
swapon -a : 啟用所有交換分區
禁用交換分區 :
swapoff DEVICE
swapoff -a
開機自動啟用交換分區,可定義於/etc/fstab
DEVICE swap swap defaults 0 0
掛載點: swap
文件系統 : swap


SysV風格的網絡服務腳本
# service network restart
# /etc/rc.d/init.d/network start
# /etc/init.d/network

vim service.sh

#!/bin/bash
#
srvname=`basename $0`
lockFile=""/var/subsys/$srvname"

if [ $# -lt 1 ]; then
echo "Usage:$srvname {start|stop|restart|status}"
exit 3
fi

if [ $1 == ‘start‘ ]; then
if [ -e $lockFile ]; then
echo "$srvname is running..."
else
touch $LockFile &> /dev/null
echo "Start $srvname successfully."
fi
elif [ $1 == ‘stop‘ ]; then
if [ -e $lockFile ]; then
rm -f $lockFile &> /dev/null
echo "Stopping $srvname finished."
else
echo "$srvname is stopped."
fi
elif [ $1 = ‘restart‘ ]; then
rm -f $lockFile $> /dev/null
touch $LockFile &> /dev/null
echo "Restarting $srvname finished."
elif [ $1 = ‘status‘ ]; then
if [ -e $lockFile ]; then
echo "$srvname is running."
else
echo "$srvname is stopped."
fi
else
echo "Usage:$srvname {start|stop|restart|status}"
exit 4
fi

文件系統 :
rootfs : 根文件系統
/var/log/messages
葉子節點 : 文件

掛載 :

分區 : mkfs, mke2fs
mkfs -t xfs
高級格式化: 創建文件系統的
文件系統,管理文件,實現文件的按名存取;
文件系統: 位於內核當中
系統調用
open(),close,read,write,create,delete

磁盤的第0個扇區,磁盤最前面的是
MBR : Master Boot Record 引導整個磁盤的操作系統
446 : bootloader
64 : 16*4文件分區表
2 : 5A 可引導的


Boot block : 1024bytes,頭兩個扇區,引導塊 引導哪個分區上的操作系統

index: 索引中存儲 : 大小,權限,屬主,屬組,時間戳,對應的磁盤塊,塊指針,
小文件用塊指針,大文件用二級指針,再大就用三級指針
每一個條目稱為inode (index node),所存儲的數據稱為元數據 : MetaData inode number
條目都有一個編號叫inode 每一個條目128個字節
/ 根是自引用的
為了避免全表掃描去找空閑磁盤塊,使用bitmap
block bitmap
inode bitmap

block

block group : 塊組
100w : 5w個塊, 20組;
塊組0 裏邊第1024個字節以後的字節叫超級塊

Super Block; GDT; Block Bitmap; inodeBitmap; InodeTable; DataBlocks
Super Block並不是每一個塊組裏都有, 只是在有些組裏面有備份,一般在0,1,3,5,7,9

GDT : group description table

tune2fs -l
顯示超級塊信息
dumpe2fs : 輸出ext文件系統信息
-h : 也可以顯示超級塊信息
du : disk usage
-s : summary, 顯示某指定路徑下所有文件的大小之和
-h : human-readable
df : disk free 磁盤空閑空間量
-l : 只顯示本地文件系統
-h : human-readable
-P : posix兼容的風格顯示
-i : 顯示inode使用信息, 而非1k塊

刪除, 移動, 復制

鏈接文件 :
硬鏈接 : 比如指向同一個inode的兩個不同路徑
ls -l: 第二段顯示出的數字指文件被硬鏈接的次數
特性 :
不能跨分區使用;
不能對目錄創建硬鏈接;
刪除原文件路徑,不影響鏈接文件的使用
所有文件指向同一個inode, 因此, 為同一個文件

軟鏈接,符號鏈接,symblc link
ls -l : 顯示文件類型為1的文件
bash中測試文件是否為符號鏈接文件,使用
-L或-h
特性 :
不受分區限制;
能夠對目錄創建;
刪除原文件,鏈接文件將無法使用
鏈接文件與源文件指向不同的inode,所以,並非同一個文件


ln [-s] SRC_FILE LINK_FILE : 有-s創建符號鏈接文件,沒有-s創建硬鏈接文件
-v : verbose : 顯示詳細過程

ext文件系統 : 擴展屬性
lsattr
chattr +|-|= [options]
i : 只讀
a : 只能追加

文件壓縮, 解壓縮, 歸檔
壓縮格式 : gz, bz2, xz, zip, Z

壓縮算法: 算法不同, 壓縮比也會不同

compress : FILENAME.Z
uncompress

gzip : .gz
gzip /PATH/TO/SOMEFILE : 壓縮完成後會刪除原文件
-d : 解壓縮
-# : 1-9, 指定壓縮比,默認是6:

gunzip : gunzip /PATH/TO/SOME_FILE.gz : 解壓完成後會刪除原文件
zcat /PATH/TO/SOMEFILE.gz : 不解壓的情況下, 查看文本文件的內容

bzip2 : .bz2
比gzip有著更大壓縮比的壓縮工具
bzip2 /PATH/TO/SOMEFILE
-d
-# : 1-9, 默認是6
-k : 壓縮時保留原文件

bunzip2 /path/to/somefile.bz2

xz : .xz
xz /PATH/TO/SOMEFILE
-d
-# : 1-9, 默認是6
-k : 壓縮時保留原文件
unxz
xzdec 也可以解壓
xzcat

zip : 既歸檔又壓縮的工具
zip FILENAME.zip FILE1 FILE2 ... : 壓縮後不刪除原文件
unzip FILENAME.zip

tar : 歸檔工具 .tar
-c : 創建歸檔文件
-f FILE.tar: 操作的歸檔文件
-x : 展開歸檔
--xattrs : 歸檔時,保留文件的擴展屬性信息
-t : 不展開歸檔,查看歸檔的哪些文件

-C : 展開到指定目錄

tar -xf file.tar -C /tmp/files

xzcat : 不解壓查看內容

-zcf : 歸檔並調用gzip壓縮
-zxf : 調用gzip解壓縮並展開歸檔

-jcf : bzip2
-jxf :

-Jcf : xz
-Jxf :

cpio : 歸檔工具


IDE或SATA硬盤屬性管理工具 :
# hdparm

補充命令 :
dd : convert and copy a file
copy: 復制文件
dd : 復制0 1 底層代碼的
dd if=/path/to/src_file 源文件
of=/path/to/dst_file 目標文件
bs=1024 | 2k 復制1024個字節的塊大小
count=2 復制兩個塊

dd if=/var/file of=/tmp/file
可以不復制完,可以復制多少字節

MBR備份
dd if=/dev/sda of=/root/sda_mbr.backup bs=512 count=1 MBR備份

dd if=/sda_mbr.backup of=/dev/sda bs=512 count=1

dd if=/dev/zero of=/root/testfile bs=4k count=1024

/dev/zero : 0生成器
/dev/null : 位桶

練習 : 寫一個腳本
從鍵盤讓用戶輸入幾個文件,腳本能夠將此幾個文件歸檔壓縮成一個文件
read :
-p : PROMPT 給出提示

#!/bin/bash
2 #
3 read -p "input three files" FILE1 FILE2 FILE3
4 read -p "Destination:" DEST
5 read -p "Compress[gzip|bzip2|xz]" COMP
6
7 case $COMP in
8 gzip)
9 tar -zcvf ${DEST}.tar.gz $FILE1 $FILE2 $FILE3 ;;
10 bzip2)
11 tar -jcvf ${DEST}.tar.bz2 $FILE1 $FILE2 $FILE3 ;;
12 xz)
13 tar -cf ${DEST}.tar $FILE1 $FILE2 $FILE3
14 xz ${DEST}.tar
;;
15 *)
16 echo "Unknown"
17 exit 9
;;
18 esac

while循環 : 適用於循環次數未知的場景
語法:
while CONDITION; do
statement
...
done

每隔5秒鐘判斷hadoop用戶有沒有登錄
#!/bin/bash
#
who | grep ‘hadoop‘ &> /dev/null
RETVAL=$#

while [ $RETVAL -ne 0 ]; do
sleep 5
who | grep ‘hadoop‘ &> /dev/null
RETVAL=$#
done

echo "hadoop is logged in"

寫一個腳本:
1) 顯示一個菜單給用戶:
d|D) show disk usages.
m|M) show memory usages.
s|S) show swap usages.
*) quit.
2) 當用戶給定選項後顯示相應的內容;

擴展:
當用戶選擇完成,顯示相應信息後,不退出;而讓用戶再一次選擇,再次顯示相應內容;除了用戶使用quit;
#!/bin/bash
#


raid及mdadm
IDE : 133Mbps 並行
SATA:300Mbps, 600Mbps, 6Gbps 串行
USB 3.0 : 是480Mbps 串行
SCSI : Small Computer System Interface
10K,15K 並行
SAS : 2.5英寸

RAID : Redund ant Arrays of Independent Disks
級別: 僅代表磁盤組織方式不同,沒有上下之分;
0 : 條帶 性能提升:讀,寫
沒有冗余能力(冗錯能力)
空間利用率: nS
至少2塊盤
1 : 鏡像 性能表現:寫性能下降,讀性能提升
冗余能力有
空間利用率 : 1/2
至少2塊盤
4 : 校驗碼
5 : 輪流校驗 性能表現: 讀,寫提升
冗余能力有
空間利用率: (n-1)/n
至少3塊盤
10 性能表現 : 讀寫都提升
冗余能力有
空間利用率1/2
至少4塊盤
01 性能表現: 讀,寫提升
冗余能力有
空間利用率 1/2
至少4塊盤
50 性能表現 : 讀,寫提升
冗余能力有
空間利用率 (n-2)/n
至少6塊盤
jbod : 多個盤連接成一個盤
性能表現 : 無提升
冗余能力: 無
空間利用率 100%
至少2塊

硬件RAID
軟件RAID

邏輯RIAD:
/dev/md#

md : 內核模塊
mdadm : 將任何塊設備做成RAID
模式化的命令:
創建模式
-C
專用選項
-l : 級別
-n : 設備個數
-a : 自動為其創建設備文件
-c : CHUNK大小 2^n, 默認為64K
-x #: 指定空閑盤個數
管理模式
--add, --remove, --fail

監控模式
-F
增長模式
-G
裝配模式
-A
查看RAID陣列的詳細信息
mdadm -D /dev/md#
--detail

RAID0
2G :
4 : 512MB
2 : 1G

mdadm -C /dev/,d0

RAID1
2G :
2 : 2G

mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sda{5,6}

cat /proc/mdstat

停用陣列
mdadm -S /dev/mad0
--stop

mdadm -A /dev/md1 /dev/sda7 /dev/sda9

去掉錯誤的盤
mdadm /dev/md1 -r /dev/sda8

裝配進新盤
mdadm /dev/md1 -a /dev/sda9

watch : 周期性的執行指定命令, 並以全屏方式顯示結果
-n # : 指定周期長度,默認單位為秒,默認為2
格式: watch -n # ‘COMMAND‘

將當前RAID信息保存至配置文件, 以便以後進行裝配 :
mdamd -D --scan > /etc/mdadm.conf

mdadm -S /etc/md0 停用

mdadm -A /etc/md0 啟用

RAID5 :
2G: 3, 1G

通常用的RAID10
速度
可用性

鏡像,mirror,校驗碼

MD: Multi
mdadm : 用戶空間工具,管理工具

MD,DM
/dev/md#
meta device

DM : Device Mapper
邏輯設備
RAID,LVM2

DM : LVM2
快照
多路徑

fdisk /dev/sda
新建兩個盤,8e : LVM 格式
partprobe /dev/sda

pv
pvcreate /dev/sda{10,11} 創建PE

pvs 或者 pvdisplay 顯示創建的PE

pvscan
vg
vgcreate, vgremove,

創建vg : vgcreate myvg /dev/sda{10,11}

vgcreate VG_NAME /PATH/TO/PV
-s# : PE大小, 默認為4MB
vgcreate myvgs -s 8M /dev/sda{10,11}

縮小vg,拿掉一個pv
pvmove /dev/sda11 挪走pv上數據

vgreduce myvg /dev/sda11

擦除pv
pvremove /dev/sda11

添加pv
pvcreate /dev/sda11
vgextend myvg /dev/sda11

lv
lvcreate, lvremove, lvextend

lvcreate -n LV_NAME -L #G VG_NAME
lvcreate -L 50M -n testlv myvg
lvs, lvdisplay,
創建好後格式化
mke2fs -j /dev//myvg/testlv

掛載
mount /dev/myvg/testlv /mnt
ls /mnt 顯示一個新的分區

移除一個邏輯卷
lvremove /dev/myvg/testlv

一.擴展邏輯卷 不影響數據:
lvextend
-L [+]# /PATH/TO/LV 物理邊界

resize2fs -p /PATH/TO/LV 邏輯邊界

二.縮減邏輯卷 不影響數據
註意: 1.不能在線縮減,先要卸載
2.確保縮減後的空間大小依然能存儲原有的所有數據;
3.在縮減之前應該先強行檢查文件,以確保文件系統處於一致性狀態;
1, df -lh

2, e2fsck -f /dev/myvg/testlv

3, resize2fs /PATH/TO/LV 2G

lvreduce -L [-]# /PATH/TO/LV

三.快照卷
1. 生命周期為整個數據時長,在這段時長內,數據的增長量不能超出快照卷大小;
2. 快照卷應該是只讀的;
3. 跟原卷在同一卷組內;
lvcreate
-s
-p r|w
lvcreate -L # -n SLV_NAME -s -p r /PATH/TO/LV

磁盤分區與格式化