mount
掛載:將額外文件系統目錄與根文件系統目錄建立關聯關系,使得此目錄做為其它文件訪問入口行為。
掛載目錄必須事先存在,因此掛載前必須建立好掛載目錄。? ? ?mkdir /data/sdb2
使用UUID掛載? ? ? ? ? ? ?mount? UUID=”……” /data/sdb2? ? ? ? ? ? #穩定推薦
使用設備名掛載? ? ? ? ? ? mount? /dev/sdb2 /data/sdb2
使用卷標掛載? ? ? ? ? ? ? ? mount? LABEL=/data/sdb2 /data/sdb2
掛載信息會更新? ? ? ? ? ?/etc/mtab文件
mount -o? ?? ? ? ? ? ? ? ? ?掛載文件系統選項,多個選項使用逗號分隔
例如:把目錄對應的掛載設備設為只讀狀態? ? ? ? ? mount -o remount,ro /data/sdb1
async /sync? ? ? ?異步與同步模式
sync同步模式:不經過buffer,系統速度會下降,但是文件實時更新不容易丟失
atime/noatime? ? ? ? ? ? 目錄和文件更新或者不更讀時間
diratime/nodiratime? 目錄更新或不更新讀時間
exec/noexec:是否支持將文件系統上運行應用程序
此功能能夠為臨時接入的硬盤或者U盤臨時禁用執行權限,防止惡意程序感染,有利于安全。
mount -o remount,noexec /data/sdb2? ? ? ?#這樣文件夾下所有可執行文件都不可運行
注意:bash /data/sdb2/f1.sh 依然可以執行,解除非執行狀態? ?mount -o exec,remount /data/sdb2
dev/nodev:是否支持在此文件系統上使用設備文件? ? ?mount -o remount,nodev /data/sdb2
suid/nosuid:是否支持suid和sgid權限? ? ? ? ? ? ? ? ? ? ? ? ? ?mount -o remount,nosuid /data/sdb2
mount -B?? ? ?掛載文件夾? ? ? ? ?例如:mount -B? /data/sbd1 /mnt/sdb1
注意:這種掛載關系df查不到,mount查的到,如果有些文件處于不同的目錄下,但是節點編號相同,連接
數為1,就是這種情況導致。
mount -o remount
命令可以不用取消掛載直接掛載另一個,這樣可以避免其他用戶在用期間進行掛載改掛。
mount -o noacl,remount /dev/sdb1 /data/sdb1
umount
取消掛載:為解除此關聯關系的過程。
可以寫設備名,或者掛載點名皆可。
注意:如果同一文件夾掛載兩個分區a和分區b,會導致第一次掛載的分區a文件無法顯示,這時如果取消掛
載分區a,實際被取消掛載的是分區b。
cat /proc/mounts? ? ?查看所有掛載點,包括隱藏掛載點
findmnt? ? ?查看掛載情況? ? ?如:findmnt /data/sdb1
有則說明已經掛載,反之則尚未掛載,編腳本的時候實現測試是否掛載
findmnt /data/sdb2 &> /dev/null || mount /dev/sdb2 /data/sdb2
lsof? ? ? ? ? ?查看正在訪問指定文件系統的進程? ? ? ? ? ?如: lsof /data/sdb1? 或者? ? fuser -v /data/sdb1
fuser? ? ? ? 終止所有在正訪問指定的文件系統的進程? ? 如:fuser -km /data/sdb1
總結:
1.一個掛載點(文件夾)只能掛一個設備,否則就算掛載成功,最后生效的只是最后一個。
2.掛載分區最好掛載在空文件夾上,不然有可能出現某些原有文件被隱藏無法讀取。(如果想訪問舊文件,
只能取消掛載點)
3.一個設備可以掛載上多個文件夾,看到的內容一樣。
4.對于備份文件目錄可以只讀方式掛載? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?mount -r /dev/sdb1 /data/sdb1
5.隱藏掛載,不更新/etc/mtab? 只在Centos6中有效? ? ? ? ? ? ? ? mount-n /dev/sdb1? /data/sdb1
則df以及 mount命令等都查不到掛載更新情況,可事實已經掛載,實現隱藏掛載的功能。
掛載次數和檢查時間間隔
掛載次數累計達到37次或者時間超過六個月,系統會觸發條件對磁盤進行修復掃描,防止文件系統被破壞
相當于執行fsck /dev/sdb1
觸發次數可以更改? ? ? tune2fs -c 20? /dev/sdb1
ACL權限設定
Centos6下手動增加的分區默認沒有ACL功能,必須手動添加,有兩種方法:
方法一:先取消掛載再重新掛載
生效ACL? ? ? ??umount /data/sdb1? ?;? tune2fs -o acl /data/sdb1? ; mount /data/sdb1
取消ACL? ? ? ?umount /data/sdb1? ? ; tune2fs -o ^acl /data/sdb1 ;mount /data/sdb1
方法二:
生效ACL? ? mount -o acl? /dev/sdb1? data/sdb1
取消ACL? ? ?umount /data/sdb1
如果有用戶正在使用無法取消掛載,則用? ? ?mount -o noacl,remount /dev/sdb1 /data/sdb1
注意:此命令可實現對于根目錄等無法取消掛載的目錄實現重新掛載
實驗:模擬U盤功能
掛載文件? ? mount -o loop 可以掛載文件(文件模擬分區)
dd if=/dev/zero of=/root/p1 bs=1M count=100
mkfs.ext4 p1
blkid p1
mount -o loop /root/p1 /mnt
這樣進入/mnt目錄下看到的文件是儲存在p1文件里,文件p1模擬分區使用,然后當u盤用,用scp命令傳給
別的機子,然后再掛載實現u盤功能。如 :scp p1 192.168.30.100:/data
注意:這里只是臨時生效,并沒有寫入/etc/fstab,如果要永久生效,必須寫入文件,而且不能用UUID,
只能用設備文件名,備注要寫成loop,修改完后執行mount -a 直接生效
losetup -a? ? 查看所有loop映射關系
Centos6下默認支持最多8個這樣的文件掛載設備,可以手工建立? ? ?mknod /dev/loop8 b 7 8
修改權限? ? ? ?chmod 660 /dev/loop8
如果使用mount -o? loop 系統會默認分配,要指定分配可以使用:? ? losetup /dev/loop8 p2
映射關系建立后掛載:? ? ? ? ?mkdir /data/loop8;mount /dev/loop8 /data/loop8
Centos6如果需要大量增加loop文件可以修改內核文件方法增加:??vim /boot/grub/grub.conf
在kernel行末尾增加內容max_loop=100,必須reboot生效
總結:
1、掛載在文件夾上的可以是分區、文件夾、文件(以后還有網絡分區)
2、默認掛載defaults:相當于rw, suid, dev, exec, auto, nouser, async
3、掛載都是臨時生效,要想永久生效,就必須寫入文件。
修改/etc/fstab內容
前面的1代表每天備份1次,如果是0就代表不備份,2表示2天備份一次
注意:這樣寫并不代表備份,要結合備份工具才能實現(dump),現在用的較少,一般寫0就可以了。后
面的2代表開機時是否檢查文件系統完整性(fsck),1、2代表檢查次序,0代表不檢查。一般都寫成0這樣
就不會因為錯誤,而導致機子重啟報錯。修改完成后,想不重啟即時生效內容:
mount -a?? 讀取/etc/fstab內容,直接生效。
4、/etc/fstab文件比較重要,建議備份。
注意:
如果原來已經有的某條記錄進行了更改,例如增加ACL功能,然后用mount -a是無法生效的。這時候要
改,可以先取消掛載,然后再重新執行mount -a。但是這種方法有用戶正在訪問的時候不好用。推薦還是
用mount -o remount /data/sdb2進行更改。
實驗:
1、如果更改了UUID但是沒有保存,同時該條記錄設置了開機檢查,重啟報錯怎么辦?
tune2fs -U `uuidgen` /dev/sdb2? ? ? ;? ? ? ?blkid /dev/sdb2
解決方法:
1)這時候機子重啟后是無法進入系統的,先根據系統提示輸入root口令進入系統,然后修改vim /etc/fstab
發現根目錄是只讀狀態,無法修改。
2)用命令mount -o rw,remount /重新掛載后根目錄變成可讀寫狀態。
3)進入/etc/fstab里面修改UUID或者修改啟動檢查項為0都可。
總結:建議修改/etc/fstab前進行備份? ? ? ? cp /etc/fstab{,.bak}
2、如果掛載點被刪除,系統還是可以啟動的,只需要重新建立掛載點,再掛載即可。
rm -rf /data/sdb2? ;reboot ;mkdir /data/sdb2? ;mount -a
分區遷移
遷移/home到新分區上
隨著使用時間的增加,在根目錄的/home目錄隨著用戶的使用越來越大,感覺需要增大應對,則需要對現
有的/home分區進行遷移。
1、第一步先做備份/home/(重要)
2、建立分區fdisk、gdisk? ? ? ? ? ? ? fdisk? /dev/sdb
3、建立文件系統? ? ? ? ? ? ? ? ? ? ? ? ? ? ?mkfs.ext4 /dev/sdb1 -L /home
4、建立臨時文件夾,掛載臨時文件夾? ? ?mkdir /mnt/home? ;? ?mount /dev/sdb1 /mnt/home
5、發布通知,并切換到單用戶模式(單機模式會導致斷網,只能在機房操作,無法遠程操作)
init 1 ;? ? ?runlevel? ? ? ? ? ? ?#切換到單用戶模式確保沒有用戶使用/home
6、遷移數據? ? ? ? ?cp -av /home/* /mnt/home/? ? ? ?#包含隱藏文件可以用cp -av /home/. /mnt/home/
7、刪除舊/home分區里的數據,防止空間浪費? ? ? ?rm -rf /home/*? ?;? ?ls /home? ?;? ? ls /mnt/home
8、在/etc/fstab里加入新分區數據 并保存? ? ? ?vim /etc/fstab? ? ?;? ? ?r!blkid /dev/sdb1? ?;mount -a
9、取消掛載臨時目錄,刪除臨時目錄? ? ? ?umount /mnt/home? ;rm -rf /mnt/home
10、切換到正常用戶模式? ? ? ? ? ? ?init? 5
注意:數據必須備份,init1會導致斷網,無法遠程操作,根分區沒法遷移。
把/home移動回根目錄下,取消遷移:
mkdir /mnt/home
mount /dev/sdb1 /mnt/home
init1
umount /home
mv /mnt/home/* /home/
vim /etc/fstab
刪除掛載信息
umount /mnt/home
rm -rf /mnt/home
fdisk /dev/sdb 刪除分區
永久掛載光盤分區
mkdir /mnt/cdrom
mount /dev/sr0 /mnt/cdrom
寫入/etc/fstab
/dev/sr0?? /mnt/cdrom? iso9660? defaults 0? 0
注意:這里不能用UUID和卷標名,只能寫設備名
掛載USB介質
手動掛載? ? ? mkdir /mnt/usb? ?; mount /dev/sdf /mnt/usb
查看USB設備是否識別? ? ?lsusb
注意:使用u盤拷貝資料的時候很容易出現未同步問題(buffer)所以要用sync同步,如:
cp /etc/* /mnt/usb? ? ;sync;sync;sync
永久掛載文件夾
就是文件夾掛載文件夾
mkdir /mnt/boot
vim /etc/fstab
/boot? /mnt/boot?????? none?? bind?? 0?? 0
mount -a
處理交換文件和分區
swap
free -m? ? ?查詢內存的使用情況使用情況
Centos6是buffer和cache分開,Centos7buffer和cache是合并顯示
一般的比例是1:2左右,內存1?? swap2
具體要根據內存來決定,如果內存大就沒必要大
如果想改變swap分區的大小有兩種方法:
第一種方法:直接取消swap分區重新分,但是有可能swap正在使用,無法完成。
第二種方法:另外建立一個新的swap分區,建議選擇一個高速硬盤來建立swap分區,固態磁盤,如果是機
械磁盤,盡量是空的機械磁盤,而且盡量往外道分(柱面數越小越外圈)。
1、創建SWAP分區? ? ? ? ?fdisk? /dev/sdb? ? ?#記得修改id用t? ? ? 82 SWAP類型
2、創建SWAP文件系統? ? ? ?mkswap /dev/sdb1 -L swap_sdb1
3、掛載SWAP? ? ? ? ?vim /etc/fstab ;r!blkid /dev/sdb1? ? ? ? ?#可以添加優先級信息pri=100 用UUID
4、swapon -a生效
5、swapon -s? ? 相當于運行cat /proc/swaps可以查詢當前生效的所有swap分區,包括優先級信息,數字
越大優先級越高優先級可以修改。
永久修改:
可以指定swap分區0到32767的優先級,值越大優先級越高
優化性能:分布存放,高性能磁盤存放
保存后先禁用? ? swapoff /dev/sdb1
然后? ? ?swapon -a
臨時修改? ? swapon -p
用文件來做SWAP分區
1、生成文件(創建分區)? ? ? ? dd if=/dev/zero of=/swapfile bs=1024M count=2
2、創建文件系統? ? ? ? ? ? ? ? ? ? ? mkswap /swapfile
3、掛載分區(文件速度較慢,不建議加優先級)
vim /etc/fstab? ? ? ?;? /swapfile????? swap??? swap?? defaults???? 0? 0? ?;swapon -a
4、去除所有添加的SWAP分區? ? ? ?swapoff /dev/sdb1? ?;swapoff /swapfile
vim /etc/fstab? ? ? #刪除里面的swap分區信息,
刪除文件以及分區? ? ? ? ?rm -f /swapfile? ? ;? ? ?fdisk /dev/sdb
掛載光盤
在圖形界面下,光盤默認自動掛載
手工掛載:? ? ? mount /dev/cdrom /mnt/
彈出/彈入光盤? ? ? eject/eject -t? ? ? ? #小技巧:彈出光驅定位故障電腦
制作ISO鏡像文件
cp /dev/sr0 /data/centos7.iso? 或者? ? dd if=/dev/sr0 of=/data/centos7.iso
把目錄打包制作ISO鏡像? ? ? mkisofs -r -o etc.iso /etc/
查看? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?file etc.iso
刻錄光盤? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?wodim –v –eject centos.iso
合并兩個盤源(centos6)方便做成yum源
先把兩張光盤的內容合并到一個目錄里? ?mkdir /centos6? ?;cp /mnt/cdrom/* /centos6/ -r
掛載第二張盤? ? cp? -rv /mnt/cdrom/. /centos6/? ? ? #這里.代表包含隱藏文件,發現相同文件則直接覆蓋
mkisofs -r -o /data/Centos-6.9-x86_64-Everything.iso /centos6/
注意:這種光盤可以做yum源,但是不能做啟動光盤,要做啟動盤可以用
mkdvdiso官方工具制作完整盤,可以引導系統
https://wiki.centos.org/zh/TipsAndTricks/CDtoDVDMedia?highlight=%28mkdvdiso%29
用途:mkdvdiso.sh source /destination/DVD.iso? ? ? ? ? source 代表有2張光盤內容的目錄
df? ? ? ? ??查看磁盤分區的使用情況
df???????????? 默認1K為單位
df -h???????? 人類易讀方式
df -I????????? 以節點編號代替塊
df -P???????? 以Posix兼容的格式輸出,長名字文件對齊
du? ? ? ? ? ??顯示目錄空間的使用情況
du /data/?? 文件夾內統計
du -h???????? 人類易讀
du -s????????? 匯總
du –max-depth 2 /etc/? 最大深度
dd? ? ? ? ? ?轉換和復制文件
dd if=/PATH/FROM/SRC of=/PATH/TO/DEST
bs=#:block size, 復制單元大小
count=#:復制多少個bs
skip=blocks? ? ?從開頭忽略blocks個ibs大小的塊
seek=blocks? ? ? ?從開頭忽略blocks個obs大小的塊
count=n? ? ? ? ? ? ? ? 只拷貝n個記錄
例:? 建立文檔f1??????123456?? 建立文檔f2? ??abcdefgh
1)dd if=f1 of=f2? ? ;cat f2? ? ? ?結果顯示:123456
2)dd if=f1? of=f2? bs=1 count=2 skip=3 seek=4? ?;cat f2? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?結果顯示:abcd45
3)dd if=f1? of=f2 bs=1 count=2 skip=3 seek=4 conv=notrunc? ?;cat f2? ? ?結果顯示:abcd45gh
4)dd if=f2 of=f3 conv=ucase? ? ? ? #轉換大小寫? ?結果顯示:ABCD45GH
練習:有一個大于2K的二進制文件fileA?,F在想從第64個字節位置開始讀取,需要讀取的大小是
128Byts。又有fileB, 想把上面讀取到的128Bytes寫到第32個字節開始的位置,替換128Bytes,則
dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc
備份MBR:? ??dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1
破壞bootloader:? ? ? dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446
修復bootloader:? ? ? ? ?dd if=/tmp/mbr.bak of=/dev/sda bs=64 count=1 skip=446 seek=446
查看bootloader:? ? ? hexdump -C /dev/sda -n 512
備份數據:?
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/sda of=/dev/sda
說明:當硬盤較長時間(比如1,2年)放置不使用后,磁盤上會產生消磁點。當磁頭讀到這些區域時會遇到
困難,并可能導致I/O錯誤。當這種情況影響到硬盤的第一個扇區時,可能導致硬盤報廢。上邊的命令有可
能使這些數據起死回生,且這個過程是安全高效的
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/99502