btrfs、磁盤、 rpm等
btrfs的特性:
1.可擴展性:
extent是最小的邏輯單元,每個extent是由一組連續的block組成;
ext文件系統的inode數量是一定的,btrfs的inode數量是動態可調整的;
2.多物理卷支持:
btrfs可以跨越多個物理設備動態的增加或減少設備來達到擴容或縮容的目的;而且從技術角度來講,btrfs還支持raid0,raid1,raid5,raid10等;還可以支持在線添加,刪除及修改設備;
3.寫時復制更新機制(COW,Copy on Write)
所謂的COW就是每次寫磁盤數據的時候,先將當前塊的數據復制到一個新塊中,在新塊中進行數據更新寫入,當新塊寫入完成後,只需將原來指向舊塊的指針指向新塊即可
4.雙重校驗機制--數據及元數據都有校驗碼:checksum
5.支持子卷:子文件系統
6.支持快照卷:
對父卷做快照
對子卷做快照
對快照卷左快照
7.透明壓縮,隱形壓縮:
mkfs.btrfs
-L:為即將創建的btrfs文件系統指定卷標
-d:為數據存儲指定類型;可以選擇的類型:raid0, raid1, raid5, raid6, raid10 or single.
-m:指定元數據的存儲方式;可以選擇的類型有:raid0, raid1, raid5, raid6, raid10, single or dup.
-O:指定btrfs文件系統的特性,如果想要查看某些特性 mkfs.btrfs -O list-all
可以使用支持btrfs文件系統的mount命令中使用下列方式透明壓縮功能
mount -o compress={lzo|zlib} DEVICE MOUNT_POINT
btrfs
btrfs - control a btrfs filesystem
btrfs <command> [<args>]
btrfs filesystem show
查看btrfs文件系統的詳細屬性;
btrfs filesystem df /mnt/btrfs/(MOUNT_POINT)
查看文件系統的掛載和使用情況
例:btrfs filesystem df /mnt/btrfs/
在線修改文件系統
btrfs filesystem resize {+|-}SIZE[kKgGtTmMpPeE] MOUNT_POINT
例:btrfs filesystem resize -15G /mnt/btrfs/
btrfs filesystem resize +5G /mnt/btrfs/
btrfs filesystem resize max /mnt/btrfs/
向btrfs文件系統添加或刪除設備
btrfs device
btrfs device add [options] <device> [<device>...] <path>
向文件系統中添加一個新設備
btrfs device delete <device> [<device>...] <path>
從文件系統中刪除一個設備
平衡數據
btrfs balance start [options] <path>
開啟跨設備的chunk的數據平衡
-mconvert={radi0|raid1|raid5|radi10|raid6|single|dup}
改變元數據的數據平衡布局方式
例:btrfs balance start -mconvert=raid5 /mnt/btrfs/
-dconvert={radi0|raid1|raid5|radi10|raid6|single}
改變數據的數據平衡布局方式
例:btrfs balance start -dconvert=raid6 /mnt/btrfs/
btrfs balance pause <path>
暫停數據平衡
btrfs balance cancel <path>
取消正在運行的或已經暫停的數據平衡
btrfs balance resume <path>
Resume interrupted balance恢復被打斷的數據平衡
btrfs balance status [-v] <path>
顯示正在運行的或已經暫停的數據平衡的狀態信息
Show status of running or paused balance
子卷管理:
btrfs subvolume create [-i <qgroupid>] [<dest>/]<name>
創建子卷
例:btrfs subvolume create /mnt/btrfs/mysub1/
btrfs subvolume delete [options] <subvolume> [<subvolume>...]
刪除子卷
例:btrfs subvolume delete /mnt/btrfs/mysub1/
子卷類似於ext文件系統中將其他分區掛在到根目錄下的某個空閑子目錄的分區
快照
btrfs subvolume snapshot [-r] [-i <qgroupid>] <source> <dest>|[<dest>/]<name>
例:btrfs subvolume show <subvol-path>
顯示子卷的信息
btrfs subvolume show /mnt/btrfs/mysub1/
創建指定子卷的快照卷
btrfs subvolume snapshot /mnt/btrfs/mysub1/ /mnt/btrfs/snap_mysub1
將btrfs和ext系列進行轉換
btrfs-convert
將ext系列文件系統裝換為btrfs
btrfs-convert /dev/sdb1
註意:/dev/sdb1分區,必須事先格式化為ext系列文件系統
將文件系統btrfs回滾到ext
btrfs-convert -r /dev/sdb1
磁盤配額:
文件服務器:共享存儲空間,讓用戶能夠隨時存儲數據;
FTP:
SMB:
網盤:急速上傳
磁盤配額主要是針對於這類文件服務器進行用戶的磁盤空間使用限制而提出的
磁盤配額的設定對象
1.能夠實施讀寫操作的塊設備
2.要有正確的文件系統;
磁盤配額主要限制哪些人的訪問行為
1.用戶
為指定的用戶限定磁盤使用量
1)磁盤空間(塊);一個block的限制代表1kb存儲空間
2)inode
2.組
限制指定組中所有成員的磁盤使用量總和
磁盤配額的類型
1.soft limit:軟限制
當用戶的磁盤使用量達到了軟配額限制將會啟動寬限期倒計時;在倒計時歸0之前,用戶可以正常使用剩余的配額量,一旦倒計時到0,意味著用戶將不能繼續使用磁盤空間,除非將數據進行清理,低於軟限制,此時可以繼續使用磁盤空間;
2.hard limit: 硬限制
用戶所能使用的磁盤空間的真正上限
一般來講,軟限制要低於硬限制的數值,
在Linux中默認寬限期為7天
需要一個用戶記錄用戶和組的磁盤使用量和配額量的數據文件
aquota.user
aquota.group
如果想要讓分區或卷能夠支持磁盤配額的設定,需要單獨的掛載選項
usrquota grpquota
1.mount -o usrquota,grpquota DEVICE MOUNT_POINT
2.ect/fstab
DEVICE(設備) MOUNT_POINT FYTYPE defaults,usrquota,grpquota 0 0
quotacheck
quotacheck - scan a filesystem for disk usage, create, check and repair quota files
-v:顯示整個操作過程的詳細信息
-g:創建,檢測和修復組配額文件
-u:創建,檢測和修復用戶配額文件
-c:經過檢測,如果沒有用戶配額文件或組配額文件,就按照用戶給定的選項進行文件的創建
-a:所有的在/dec/fstab中包含了與磁盤配額有關的掛載選項的設備上是否有對應選項的配額文件
用於編寫配額內容的命令
edquota
-u:編寫用戶配額,默認的功能
-g:編寫組配額,不推薦使用
-t:設置超出軟限制的寬限期,默認7天,可以選擇以秒,分鐘,小時,天等時間單位
使配額功能生效
quotaon,quotaoff
quotaon|quotaoff /dev/sdb1
查看配額使用情況
quota
repquota(只用root用戶可以使用)
註意:root不受磁盤配額限制;
Linux程序包管理
程序:指令+數據
面向對象程序:算法+數據結構
應用程序的存在形式,
1.源代碼形式:包含了整個應用程序的編程語言的所有代碼的文本文件
2.二進制:將源代碼經過一系列的轉換操作之後得到的可以直接執行的文件
使用源代碼來安裝應用程序
1.預處理(預處理器) -->編譯(編譯器) -->匯編(匯編器) -->鏈接(鏈接器) --> 可以直接執行的二進制程序文件
POSIX:POS,可移植操作系統
API:應用編程接口
ABI:應用二進制接口
庫級別的兼容,庫級別的虛擬化;
cywin:在Windows系統中能模擬Linux的共享庫
winE:在Linux系統中模擬Windows的庫
應用級編程語言
Java/Python/Perl/ruby/PHP/GO
系統級編程語言
C/C++
Linux
unix
要想能夠進行源代碼的編譯,需要有編譯開發環境支持
C/C++:
編譯開發環境:預處理器,編譯器,頭文件,開發庫文件
Java/Python:
編譯開發環境:預處理器,編譯器,開發庫文件
通常情況下,源代碼文件是多個文件組成的,這些文件之間存在著一定的關聯關系,我們稱這種關聯關系為依賴關系;
autoconf
automake
軟件項目構建工具:
C/C++:make
java:maven
Python:buildout
程序包管理器:
在指定的系統當中進行程序的安裝、卸載、升級、查詢及校驗等工作;
不同的Linux發行版本有著不同的程序包管理器
Debian:dpt .deb後綴名的包文件; dpkg管理工具;
redhat:rpm,rpm管理工具,.rpm後綴名;
rpm成為Linux的程序包管理器的行業標準
rpm是使用perl語言編寫的,用C語言重新rpm
rpm is package manager
S.u.S.E:rpm,.rpm後綴名,
Gentoo:采用了FreeBSd emerge管理工具
ArchLinux:pacman管理機制
以centos為例,rpm程序包管理器的相關內容
centos的程序包的管理器:
程序包的命名規則:
源代碼包:
software_name-VERSION.tar.gz
VERSION:major.minor.release
major: 主版本號,通常代表重大功能改進的版本分支
minor:次版本號,通常代表在某個版本的分支中的某個功能發生變化;
release:發行版本號,修復了某些bug或者對某段代碼進行了優化;
rpm程序包命名規則
源碼包
software_name-VERSION.src.rpm
二進制包
software_name-VERSION-[release].[os].arch.rpm
VERSION:major.minor.release
[release]: rpm封包的發行版本號
[os]:軟件所支持的操作系統的版本信息el6,el7,suse11···
arch:硬件平臺類型,i386,i686,sparc···
在制作rpm程序包的時候,通常其制作者會采用分包技術來構建rpm程序包
根據程序的不同功能,構建多個程序包
被分包的程序包一般包括兩類:
主程序包:
software_name-VERSION-[release].[os].arch.rpm
附屬功能包:
software_name-function-VERSION-[release].[os].arch.rpm
一般來講,主程序包和附屬功能包具有相同的版本號,發行版本號,操作系統及兼容平臺的標識
所以,主程序包往往被所有的附屬功能包所依賴,不安裝主程序包,就不能安裝附屬功能包
function:devel,utils,libs,tools,manual···
程序包管理的前端工具:
RHEL|Centos系統的前端管理工具:yum,Yellow Dog Update Midifier
yum在實施安裝升級卸載等工作的時候,會開啟事務;
所謂事務,將整個操作過程視為一個整體,要麽全執行,要麽全不執行
debian系的前端工具:apt-get,apt-cache
apt-get:實現安裝、卸載等功能
apt-cache:實現基於關鍵字進行搜索功能,管理本地緩存及緩存的元數據
suse前端工具:zypper
rpm程序包管理工具
1.rpm命令行工具
2.yum工具;
rpm命令行工具
功能:
1.將編譯好的應用程序的各個組成文件打包成一個或多個程序包文件
2.軟件包的安裝、卸載、升級、查詢、校驗及數據庫管理功能
rpm程序包中文件的組成清單:
1.程序的文件
2.文件清單
3.軟件安裝或卸載時所運行的腳本文件 共分為4類:
preinstall:在正式的安裝操作開始之前所運行的腳本,%pre
postinstall:在安裝完成之後所執行的腳本,%post
preuninstall:在正式卸載操作開始之前所運行的腳本, %preun
postuninstall:在卸載完成後所執行的腳本,%postun
rpm數據庫(公共)
已經安裝好的程序包名稱及版本
/var/lib/rpm
獲取程序包的途徑
1.系統的發行版的光盤
2.官方的文件服務器或者鏡像站點; http://mirrors.aliyun.com https://mirrors.tuna.tsinghua.edu.cn
3.某個項目的官方站點
4.第三方組織制作的rpm程序包站點 Fedora EPEL:紅帽光放的社區組織,在鏡像站點中也包含EPEL鏡像
特殊的搜索引擎: http://pkgs.org http://rpmfind.net
5.自己制作
建議:在獲得程序包之後,實施完整性檢查
來源合法性:
通過程序提供者的數字簽名加密的數據,通過其公鑰進行解密驗證;
程序包完整性
校驗碼sha-1
rpm和yum兩個工具的使用
rpm命令行工具:
安裝、卸載、升級(降級)、查詢、文件校驗、驗證和數據庫維護;
rpm命令的通用選項
-v:顯示安裝例程的信息,僅僅顯示安裝軟件名
-vv:顯示非常詳細的操作信息
安裝:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
install-options
-h:用50個#來表示安裝進度
--test:並不是真正的安裝軟件包,僅僅是測試是否在安裝時能夠正常完成,dry run模式;
--nodeps:忽略因為依賴關系導致的安裝錯誤,不建議使用;
--replacefiles:在安裝軟件包時,軟件包中的文件會直接將原來安裝的文件替換
--replacepkgs:無需卸載軟件包而重新安裝
--noscripts:不運行任何腳本
--nopre:安裝前腳本
--nopost:安裝後腳本
--nosignature:不考慮安裝包的來源是否合法
--nodigest:不考慮軟件包是否完整;
例:~]# rpm -ivh php-mysql-5.3.3-40.el6_6.x86_64.rpm php-pdo-5.3.3-40.el6_6.x86_64.rpm
升級
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
如果選擇被安裝的程序包事先未被安裝,則全新安裝,如果已經安裝了舊版本,則可以升級安裝
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
僅僅只能對已經安裝的低版本的程序包進行升級安裝
常用選項與安裝相同
--oldpackage:降級安裝,用老版本的程序包替換新版本的程序包
--force:強制升級
註意
1.強烈建議:不要對內核進行升級操作;Linux可以支持多內核,可以直接安裝新版本的內核,在啟動界面可以手動更換
2.升級安裝可能會帶來文件的變化,因此,系統默認不會直接更改之前安裝過的軟件的配置文件,新程序包中的配置文件會被重命名,通常會是:FINENAME.rpmnew
卸載:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
[--notriggers] [--test] PACKAGE_NAME ...
--allmatches:卸載所有匹配指定名稱的程序包的各個版本;
--nodeps:卸載時忽略依賴關系,不推薦使用
--test:測試卸載,dry run模式
查詢:
rpm {-q|--query} [select-options] [query-options]
PACKAGE_NAME:直接給出程序包名
-a:查詢所有已經安裝的程序信息
-f FILE:查找指定的文件是由哪個程序包提供的
-p PACKAGE_NAME:對還沒有安裝的程序包文件執行查詢操作
--whatprovides CAPABILITY:查詢指定的CAPABILITY是由哪個程序包所提供的
--whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個程序包所依賴
query-options
--changelog:查詢rpm程序包的changelog
-c,--configfiles:查詢制定程序包中有哪些配置文件
-d,--docfiles:查詢制定程序包中有哪些文檔文件
-i,--info:查詢程序包相關的信息,包括版本號,發行號等
-l,--list:列表顯示程序包安裝會生成哪些文件
--provides:列出指定程序包提供的所有的CAPABILITY;
-R,--requires:查詢指定程序包的依賴關系;
--scripts:查看程序包所攜帶的腳本的內容;
具體使用方法:
-qf FILE
-qc|-ql|-qd|-qi PACKAGE_NAME
-qpl|-qpc|-qpd|-qpi PACKAGE_FILE
校驗:
rpm {-V|--verify} [select-options] [verify-options]
S file Size differs
M Mode differs (includes permissions and file type)
5 digest (formerly MD5 sum) differs
D Device major/minor number mismatch
L readLink(2) path mismatch
U User ownership differs
G Group ownership differs
T mTime differs
P caPabilities differ
認證:
rpm --import /PATH/TO/KEY_FILE
rpm -K /PATH/TO/PACKAGE_FILE
數據庫管理:
數據庫的初始化和重建
/var/lib/rpm
rpm {--initdb|--rebuilddb}
[--dbpath DIRECTORY]
btrfs、磁盤、 rpm等