磁盤
1.磁盤的組成:盤片,機械手臂,磁頭,主軸馬達。盤片分爲柱面(Cylinder)和扇區(Sector),每個扇區大小爲512bytes。
2.磁盤的第一個分區記錄內容:
(1)主引導分區(Master Boot Record,MBT):安裝引導加載程序,446bytes。
(2)分區表:記錄整塊硬盤分區的狀態,46bytes。
分區
1.mbr分區表使用fdisk分區
fdisk使用m作爲提示指令,fdisk有時會使用柱面作爲分區的最小單位
partprobe [-s] ##更新linux核心的分區信息
2.按生產標準定製分區
(1)分區的實質(原理):給磁盤按照柱面爲單位劃分爲不同的塊(給一個分區指定不同的柱面數來分成不同的分區數)。柱面爲分區的最小單位。
(2)分區之後需要給分區格式化,分區格式化的原理是:把分區變成可以存儲數據的格式。
(3)磁盤分區有主分區(可直接使用)、擴展分區(不可直接使用,劃分爲邏輯分區可使用)、邏輯分區之分。一塊磁盤最多有四個主分區(原因:主分區表只有64bytes,每個主、擴展分區各要佔用16bytes),其中一個主分區的位置可以用擴展分區替換,一塊硬盤只能有一個擴展分區,這個擴展分區可以有多個邏輯分區。
3P+E
2P+E
P+E
4P 不能增加分區
(4)磁盤分區的設備名
通過設備名來訪問設備,設備名存放在“/dev”目錄中
設備名稱如下:
系統的第一塊IDE接口的硬盤稱爲/dev/hda(系統的第一塊SCSI接口硬盤的第1個分區爲/dev/sda1;)
二 /dev/hdb;
三 /dev/hdc;
系統的第一塊IDE接口硬盤的第1個分區爲/dev/hda1;
系統的第一塊IDE接口硬盤的第2個分區爲/dev/hda2。
注意:
①分區數字編號1~4留給主分區和擴展分區使用,邏輯分區編號只能從5開始;
②IDE硬盤設備名均以/dev/hd開頭,不同硬盤編號依次爲/dev/hda、/dev/hdb、/dev/hdc。
③SCSI、SAS、SATA、USB硬盤設備名均以/dev/sd開頭,不同硬盤編號依次爲/dev/sda、/dev/sdb、/dev/sdc。
④SAS、SATA爲當前2010-2012互聯網生產環境主流硬盤接口,SSD是主流硬盤接口,逐漸被應用。
性能:SSD(電子設備)>SAS(機械硬盤)>SATA(同樣的價錢容量從大到小,則順序相反)
線上服務器中,SAS是主流。
⑤Linux中常用的外部設備文件名
軟盤 /dev/fdN(N=0,1,2...)
光驅(IDE) /dev/cdrom(→/dev/hdX)
光驅(SCSI) /dev/scdN(N=0,1,2...)
硬盤(IDE) /dev/hdX(X=a,b,c...)
硬盤(SCSI) /dev/sdX(X=a,b,c...)
U盤 /dev/sdX(X=a,b,c...)
3.Linux系統對分區的要求
(1)至少有/和swap(交換分區)分區(必須有一個根分區)
(2)交換分區的作用:虛擬內存(內存不夠用了,通過虛擬內存進行緩存)
大小參考值爲1.5倍的物理內存容量。內存大於8GB,swap大小可以等於物理內存;內存爲16GB、32GB或更高,swap可在8~16GB。
數據庫使用swap會變慢。如果不分swap,內存被用完會宕機。
若發現swap被用了很多,內存有剩餘,則說明程序有漏洞(內存泄漏)。處理方式爲:找程序。
(3)建議設置獨立的/boot分區
Linux引導分區,存放系統引導文件(如Linux內核等),所有文件大小一般只有幾十兆歐。故該分區一般設置爲100~200M。
設備的查看
1.發現系統中的設備
(1)fdisk -l
(2)cat /proc/partitions
2.系統發現的,但是沒有投入使用 隨時可以使用的
blkid ##查看設備的id信息
3.正在使用的設備
df -h ##1g=2^n (更精確)
df -H ##1g=10^n
設備名稱的讀取
1./dev/xd*
x=s /dev/sd* ##sate硬盤,或者iscsi網絡存儲
x=v /dev/vd* ##虛擬硬盤,一般出現在虛擬機裏
x=h /dev/hd* ##ide硬盤 ,一般出現在老式電腦裏
*=a~... ##/dev/vda, 系統中的第一塊虛擬硬盤
/dev/sda1 ##系統中的第一塊sate硬盤的第一個分區
2./dev/cdrom,/dev/sr[0-…] ##系統中的光驅
3./dev/mapper/* ##系統中的虛擬設備
設備的使用
設備必須使用目錄來對設備中的內容進行讀取
所以設備在使用時需做掛載動作
1.blkid ##查看可使用的設備
[root@localhost ~]# blkid
/dev/sda1: UUID="40486AB4486AA87C" TYPE="ntfs"
. . . . . .
/dev/sdb1: LABEL="HP v285w" UUID="9B03-2CED" TYPE="vfat" ##插入的u盤
[root@localhost ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda5 266049616 23050072 242999544 9% /
. . . . . .
/dev/sdb1 31020992 2913408 28107584 10% /run/media/kiosk/HP v285w ##u盤掛載位置
2.mount 設備 掛載點 ##掛載設備(掛載在一個目錄後 可查看設備裏的內容 不能查看原來目錄裏的東西)
mount -o ro 設備 目錄 ##-o,指定動作,ro表示read only
mount -o ro /dev/sdb1 /mnt/
注意:當卸載設備時出現下列情況
umount: /mnt: target is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
(1)進程發現的方式
[root@localhost ~]# fuser -vm /dev/sdb1
USER PID ACCESS COMMAND
/dev/sdb1: root kernel mount /mnt
root 20071 ..c.. bash
root 20720 F.c.. vim
或者
[root@localhost ~]# lsof /dev/sdb1
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Output information may be incomplete.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 20071 root cwd DIR 8,17 16384 1 /mnt
vim 20720 root cwd DIR 8,17 16384 1 /mnt
vim 20720 root 3u REG 8,17 12288 3096 /mnt/.file.swo
(2))關閉進程的方法
[root@localhost ~]# fuser -kvm /dev/sdb1
USER PID ACCESS COMMAND
/dev/sdb1: root kernel mount /mnt
root 15647 ..c.. bash
root 20021 F.c.. vim
[root@localhost ~]# umount /dev/sdb1
[root@localhost ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda5 266049616 23050820 242998796 9% /
devtmpfs 1868044 0 1868044 0% /dev
tmpfs 1881152 516 1880636 1% /dev/shm
tmpfs 1881152 9016 1872136 1% /run
tmpfs 1881152 0 1881152 0% /sys/fs/cgroup
/dev/sda2 505580 149488 356092 30% /boot
/dev/loop0 3947824 3947824 0 100% /var/www/html/rh7.2
/dev/loop1 3947824 3947824 0 100% /rh7.2
tmpfs 376232 20 376212 1% /run/user/1000
或者
kill -9 pid
[root@localhost ~]# fuser -vm /dev/sdb1
USER PID ACCESS COMMAND
/dev/sdb1: root kernel mount /mnt
root 20071 ..c.. bash
[root@localhost ~]# kill -9 2007
-bash: kill: (2007) - No such process
[root@localhost ~]# kill -9 20071
[root@localhost ~]# umount /dev/sdb1
[root@localhost ~]# df
分區的劃分
分區小結:
mbr分區,最大分區爲2TB
主分區:由分區表記錄的分區
擴展分區:解決分區不足,分出邏輯分區
邏輯分區:在擴展分區中的分區,由擴展分區記錄
mbr + 55aa (2個字節,硬盤有效性標示,類似於目錄)+mpt (主分區表64字節)=512bytes
一個主分區佔用主分區表16個字節記錄分區信息
1.fdisk -l 查看分區
2.創建分區
fdisk /dev/vdb
Command (m for help): n ##創建分區
Partition type:
p primary (0 primary, 0 extended, 4 free) ##主分區
e extended ##擴展分區
Partition number (1-4, default 1): 1 ##確認主分區id
First sector (2048-20971519, default 2048): ##分區起始快位置 ,用默認
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519): +100M ##分區結束快位置,用+
Partition 1 of type Linux and of size 100 MiB is set
Command (m for help): wq ##保存分區操作並退出
分區之後
cat /proc/partitions ##查看設備是否被識別
mkfs.xfs /dev/vab1 ##格式化設備,在設備上添加xfs文件系統
blkid ##查看可用設備,可以看到被格式化好的設備
mount /dev/vab1 /mnt/ ##掛載設備,使設備投入使用
partprobe ##同步分區表
文件系統:
ext 分佈式文文件系統,穩定
ext2-3 可支持32TB的分區
ext4 可支持1EB的分區
vfat 可支持4TB,鏈式文件系統,穩定性差
ntfs 可支持32TB的分區,鏈式文件系統,穩定性差
xfs 可支持18EB的分區,吞吐速度7GB/S
設備永久掛載
vim /etc/fstab
設備 掛載點 文件系統類型 掛載參數 是否備份 是否檢測磁盤是否完整,數據是否有問題
/dev/vdb1 /mnt/ xfs defaults 0 0
mount -a ##讓fstab中未生效的策略生效
刪除分區
注意:正在使用的設備不能刪除
vim /etc/fstab ##刪掉之前的掛載
mount -a ##讓fstab中未生效的策略生效
umount /mnt/ ##取消掛載
df ##查看掛在點
然後fdisk /dev/vdb
Command (m for heip):d ##刪除分區/dev/vdb1
swap分區的管理
1.swap 交換分區,系統自己使用,不需要掛載
2.swap分區的建立
先建立分區
然後將分區的id改爲swap類型
Command (m for help)t ##修改分區id
Hex code (type l to list all codes):l ##列出所有的id類型代碼
Hex code (type l to list all codes):82 ##把/dev/vdb1的分區類型改爲swap,swap類型代碼爲82
vim /etc/fstab
/dev/vdb1 swap swap defaults 0 0
mkswap /dev/vdb1 ##格式化/dev/vdb1爲swap文件系統格式
swapon -a /dev/vdb1 ##激活swap設備,將新建的swap投入使用
swapon -s ##同cat /proc/swaps,列出目前使用swap的設備有哪些
swapoff /dev/vdb1 ##關閉系統使用/dev/vdb1
3.當磁盤全部被用完不能創建新分區時,可以使用文件來代替分區
dd if=/dev/zero of=/swapfile bs=1M count=1000
此文件創建後的步驟和設備的步驟一致
注意:
新建分區時,我們會遇到Command (m for help),輸入m即可查看參數的使用方法,如下所示:
Command (m for help): m ##輸入m 查看參數用法
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition ##刪除分區
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types
m print this menu
n add a new partition ##新建分區
o create a new empty DOS partition table
p print the partition table ##區分分區表信息
q quit without saving changes
##退出,但是不會保存新建的分區操作
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit ##將當前操作寫入硬盤分區
x extra functionality (experts only)
刪除swap分區
vim /etc/fstab ##刪除swap的配置
swapoff /dev/vdb1 ##停止/dev/vdb1設備的使用
swapoff /swapfile ##停止/swapfile設備的使用
rm -rf /swapfile ##刪除swap分區
fdisk /dev/vdb ##fdisk命令刪除分區
注意:
rm -rf /dev/vdb1是刪除/dev/vdb1設備文件,恢復方法爲:
mknod /dev/vdb1 b 253 17
mknod ##用於新建字符設備文件和塊設備文件
-z ##設置安全的上下文
-m ##設置權限模式
-help ##顯示幫助的信息
--version ##顯示版本的信息
b ##創建塊(緩衝)文件
c,u ## 創建字符(非緩衝)文件
p ##創建一個先進先出,先入先出
磁盤配額
爲磁盤使用用戶分配額度
分區配額是針對設備的
1.激活設備參數
mount -o usrquota /dev/vdb1 /westos/
chmod 777 /westos/
edquota -u student /dev/vdb1
Disk quotas for user student(uid 1000):
Filesystem blocks soft hard inodes soft hard
/dev/vdb1 204800 0 204800 1 0 0
存在文件的大小 軟額度 最大額度 文件個數 軟額度 最大額度
測試:
su student
dd if=/dev/zero of=/westos/file bs=1M count=600
##student用戶的配額限度是200M,然後在/westos下切割一個400M的文件
開機自動激活配額
vim /etc/fstab
/dev/vdb1 /westos xfs defaults,userqutoa 0 0
分區方式修改 mbr<—->gpt
gpt的優點:解決mbr分區只有2TB,不能滿足使用的缺點。最多支持128個分區
mbr–>gpt:
[root@203server ~]# parted /dev/vdb
GNU Parted 3.1
Using /dev/vdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel ##修改設備分區方式標籤
New disk label type? gpt ##把原有的dos標籤改爲gpt(雙擊Tab可查看所有的設備分區方式標籤)
Warning: The existing disk label on /dev/vdb will be destroyed and all data on this disk will be
lost. Do you want to continue?
Yes/No? yes
(parted) q
Information: You may need to update /etc/fstab
分區方式檢測:
[root@203server ~]# fdisk -l
Disk /dev/vda: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x00013f3e
Device Boot Start End Blocks Id System
/dev/vda1 * 2048 20970332 10484142+ 83 Linux
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
Disk /dev/vdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: gpt
Start End Size Type Name
[root@203server ~]#
luks加密
文件與文件系統的關係:文件存儲在文件系統中,文件系統存儲在磁盤上;文件系統是管理文件的軟件。
luks加密的原理:在文件與文件系統之間加密(相當於在文件與文件系統之間加上鎖),當文件被人經過文件系統取出文件時,取出的文件仍然是加密的無法使用文件。
1.新建分區
2.加密格式化
cryptsetup luksFormat /dev/vdb1 ##對/dev/vdb1進行加密
[root@localhost ~]# cryptsetup luksFormat /dev/vdb1
WARNING!
========
This will overwrite data on /dev/vdb1 irrevocably.
Are you sure? (Type uppercase yes): YES
Enter passphrase: ##設置加密的密碼
Verify passphrase:
[root@localhost ~]#
3.cryptsetup open /dev/vdb1 westos ##生成加密使用的鎖,westos是隨意命名的
[root@localhost ~]# cryptsetup open /dev/vdb1 westos
Enter passphrase for /dev/vdb1:
[root@localhost ~]#
4.mkfs.xfs /dev/mapper/westos ##將生成的鎖格式化爲xfs並投入使用
5.mount /dev/mapper/westos /mnt/ ##掛載設備
touch /mnt/westosfile{1..5}
6.umount /mnt/ ##卸載/mnt/
cryptsetup close westos ##關閉鎖
7.cryptsetup open /dev/vdb1 westos
mount /dev/mapper/westos /mnt/
加密設備開機自動掛載
[root@localhost ~]# vim /etc/fstab
/dev/mapper/westos /mnt xfs defaults 0 0
[root@localhost ~]# vim /etc/crypttab
westos /dev/vdb1 /root/passfile
[root@localhost ~]# vim /root/passfile
2017westos
[root@localhost ~]# chmod 600 /root/passfile
[root@localhost ~]# cryptsetup luksAddKey /dev/vdb1 /root/passfile
Enter any passphrase: ##輸入/etc/passfile編輯的內容,即加密的密碼
[root@localhost ~]#
清除加密
[root@localhost ~]# umount /dev/mapper/westos ##卸載生成的鎖
umount: /dev/mapper/westos: not mounted
[root@localhost ~]# cryptsetup close westos ##關閉鎖
[root@localhost ~]# mkfs.xfs /dev/vdb1 -f
meta-data=/dev/vdb1 isize=256 agcount=4, agsize=12800 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0
data = bsize=4096 blocks=51200, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=853, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@localhost ~]# vim /etc/fstab ##清除編輯的內容,還原文件
[root@localhost ~]# vim /etc/crypttab ##清除編輯的內容,還原文件
[root@localhost ~]#rm -rf /root/passfile