十、mount掛載 fstab swap


一.掛載和卸載文件系統

將額外文件系統與根文件系統某現存的目錄建立起關聯關系。進而使得此目錄做為其它文件訪問入口的行為稱之為掛載

根文件系統之外的其它文件系統要想能夠被訪問,都必須通過“關聯”至根文件系統上的某個目錄來實現,此關聯操作即為“掛載”;此目錄即為“掛載點”;


掛載點:mount_point,用於作為另一個文件系統的訪問入口;
(1) 事先存在;
(2) 應該使用未被或不會被其它進程使用到的目錄;
(3) 掛載點下原有的文件將會被隱藏;

注意:1、一個掛載點同一時間只能掛一個設備!
      2、一個設備可以掛載在多個文件夾下,只不過看到的內容都是一樣的
      3、掛載點最好是空文件夾,否則原來的文件會被暫時隱藏,直到被卸載后才會顯現出來。

1.1 mount

mount [-fnrsvw] [-t vfstype] [-o options] device dir

  • device:指明要掛載的設備;
    • (1) 設備文件:例如/dev/sda5
    • (2) 卷標:-L 'LABEL', 例如 -L 'MYDATA'
    • (3) UUID, -U 'UUID':例如 -U '0c50523c-43f1-45e7-85c0-a126711d406e'
    • (4) 偽文件系統名稱:proc, sysfs, devtmpfs, configfs
  • dir:掛載點
    • 事先存在;建議使用空目錄
    • 進程正在使用中的設備無法被卸載

補充:
如何在不重啟的情況下在虛擬機識別新增的硬盤
echo "- - -" > /sys/class/scsi_host/host0/scan

mount      # 通過查看/etc/mtab文件顯示當前已掛載的所有設備,該文件自動更新,記載設備掛載情況
mount  label=name   /data/mnt # 用卷標掛載 mount UUID="e206a05c-e04e-400c-8081-01fa18e079d4" /data/mnt # 用UUID掛載,由於uuid穩定唯一,所以盡量用uuid去掛載 # option: -t vsftype:指定要掛載的設備上的文件系統類型 -r: readonly,只讀掛載 -w: read and write, 讀寫掛載 -n: 不更新/etc/mtab,mount不可見 (cat /proc/mounts可見) -a:自動掛載所有支持自動掛載的設備(定義在了/etc/fstab文件中,且掛載選項中有auto功能) -L 'LABEL': 以卷標指定掛載設備 -U 'UUID': 以UUID指定要掛載的設備 -B, --bind: 綁定目錄到另一個目錄上; 注:查看內核追蹤到的已掛載的所有設備:cat /proc/mounts
# -o options:(掛載文件系統的選項),多個選項使用逗號分隔 (啟用和禁用的特性) async:異步模式,默認 sync:同步模式,內存更改時,同時寫磁盤 atime/noatime:包含目錄和文件 diratime/nodiratime:目錄的訪問時間戳 auto/noauto:是否支持自動掛載,是否支持-a選項 exec/noexec:是否支持將文件系統上運行應用程序
dev/nodev:是否支持在此文件系統上使用設備文件 suid/nosuid:是否支持suid和sgid權限 remount:重新掛載,不影響其他正在使用設備的用戶 ro:只讀 rw:讀寫 user/nouser:是否允許普通用戶掛載此設備,/etc/fstab使用 禁止普通用戶掛載 acl:啟用此文件系統上的acl功能 noacl:關閉acl功能 mount -o noacl,remount /dev/sdb1 /data/mnt loop: 使用loop設備 defaults:相當於rw, suid, dev, exec, auto, nouser, async findmnt MOUNT_POINT|device # 查看掛載情況,已經掛載顯示相應掛載情況,無掛載則無輸出;可用於寫腳本 findmnt /data/mnt &> /dev/dull || mount /dev/sdb2 /data/mnt lsof MOUNT_POINT fuser -v MOUNT_POINT # 查看正在訪問指定文件系統的進程 fuser -km MOUNT_POINT # 終止所有在正訪問指定的文件系統的進程
卸載
umount DEVICE umount MOUNT_POINT # 卸載

 

因此,mount命令可將將分區、文件夾(-B)、文件(loop) 都可以掛載在空文件夾上

補充:loop設備,可以在文件系統中創建一個設備文件,該設備文件可以分區,可以掛載
centos6 最多只能掛8個loop設備
ls /dev/loop*
但是,可以創建
mknod /dev/loop8 b 7 8 centos6上創建第8個loop設備

dd if=/dev/zero  of=/data/test_loop  bs=1M  count=500  # 創建loop設備
mkfs.ext4  test_loop   # 格式化
mount -o loop  test_loop  /data/mnt   # 掛載,centos6上需加-o loop選項,即我們實現了將一個文件掛載在文件夾上。

 

二、 /etc/fstab

fstab文件包含了你的電腦上的存儲設備及其文件系統的信息。它是決定一個硬盤(分區)被怎樣使用或者說整合到整個系統中的文件。具體來說:用fstab可以自動掛載各種文件系統格式的硬盤、分區、可移動設備和遠程設備等。對於Windows與Linux雙操作系統用戶,用fstab掛載FAT格式和NTFS格式的分區,可以在Linux中共享windows系統下的資源。


這個文件的全路徑是/etc/fstab。它只是一個文本文件,你能夠用你喜歡的編輯器打開它,但是必須是root用戶才能編輯它。同時fsck、mount、umount的等命令都利用該程序。

/etc/fstab 是啟動時的配置文件,不過,實際 filesystem 的掛載是記錄到 /etc/mtab 與 /proc/mounts 這兩個文件當中的。每次我們在更動 filesystem 的掛載時,也會同時更動這兩個文件喔!

系統掛載的一些限制:

•根目錄 / 是必須掛載的﹐而且一定要先於其它 mount point 被掛載進來。
•其它 mount point 必須為已創建的目錄﹐可任意指定﹐但一定要遵守必須的系統目錄架構原則
•所有 mount point 在同一時間之內﹐只能掛載一次。
•所有 partition 在同一時間之內﹐只能掛載一次。
•如若進行卸除﹐您必須先將工作目錄移到 mount point(及其子目錄) 之外。

 

我們掛載的命令執行結束后僅僅只是在內存在結束,一旦重啟原來的掛載關系都不存在,所以我們要修改配置文件/etc/fstab來保存修改,這樣才永久掛載

該文件很重要,最好備份。

 

如果出現故障

要掛載的設備或偽文件系統

1.設備文件

  LABEL:LABEL=""
  UUID:UUID=""
  偽文件系統名稱:proc, sysfs
2.掛載點
3.文件系統類型
4.掛載選項:defaults
5.轉儲頻率:0:不做備份 1:每天轉儲 2:每隔一天轉儲
6.自檢次序: 0:不自檢 1:首先自檢;一般只有rootfs才用1

 

mount -a 無需重啟,掛載/etc/fstab中的所有文件系統

注意:對於loop、光盤、文件夾、一般在fatab中寫設備名
一些特殊掛載在/etc/fatab:

補充:

mknod - make block or character special files   # 創建特殊文件
mknod [OPTION]... NAME TYPE [MAJOR MINOR] # type: b # create a block (buffered) special file c, u # create a character (unbuffered) special file mknod zero c 1 5 在 當前設備里創建zero文件,類似/dev/zero文件;注意,要提前cd至該設備的掛載目錄里。 ll /dev/zero /data/zero crw-r--r--. 1 root root 1, 5 Dec 12 17:31 /data/zero crw-rw-rw-. 1 root root 1, 5 Dec 12 14:54 /dev/zero

 

dd 命令:convert and copy a file

用法: 

  dd  if=/PATH/FROM/SRC  of=/PATH/TO/DEST

    bs=#: block size 復制單元大小

    count=# : 復制多少個bs 

補充:

簡單刪除一塊磁盤的分區
dd if=/dev/zero of=/dev/sdb bs=1 count=512

備份MBR  
 dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1

破壞MBR中的bootloader:
dd if=/dev/zero of=/dev/sda bs=256 count=1

 

兩個特殊設備:

  /dev/null:數據黑洞

  /dev/zero:吐零機

 

三、swap分區一般為內存的2倍

交換文件、交換分區,也叫虛擬內存,是系統RAM的補充
  swapon -s # 查看swap信息
創建swap分區;
第一步:fidisk 一個單獨的分區,注意將分區類型改為82!
第二步:makeswap 格式化
第三步:修改/etc/fatab配置文件
第四步:swapon -a 激活全部swap

swapon  [OPTION]...  [DEVICE]  # 啟用swap
    -a:激活所有的交換分區; -p PRIORITY:指定優先級
禁用 :swapoff [OPTION]... [DEVICE]   # 禁用swap

/etc/fstab文件中,可以在defaults后面跟pri=value 設置優先級,值越高優先級越高

 

練習:
1、根據掛載文件名查出該設備名稱。
  blkid -U `grep /data /etc/fstab | sed -r "s/UUID=([^ ]*) .*/\1/" `
  findfs `grep /data /etc/fstab | cut -d" " -f1 `

實驗1:修改/etc/fstab 中的uuid,可能導致無法啟動,怎么修復
1.根據提示,輸入root的密碼進入bash;
2.在修改/etc/fstab 文件時會提示我們該文件為只讀文件,無法修改。
3.重新掛載/目錄
  mount -o rw,remount /dev/sda2 / 重新掛載根目錄
4.再 vim /etc/fstab 修改配置文件,將最后兩位修改為0 0即可。
5.正常重啟

 

實驗2:將一個文件夾遷移至一個新的磁盤分區,如將/home目錄遷移至新的分區/dev/sdc1。

為避免在cp過程中別的用戶在修改/home,我們可以在操作cp前這么操作
init 1 切換至單用戶,也就是說別的終端不允許訪問,只允許單用戶終端訪問,結束操作后再切回至init 5

1 建立新分區
2 建立文件系統
3 mkdir /mnt/home
mount /dev/sda6 /mnt/home
4 cp -av /home/* /mnt/home
5 tar cvf /app/home.tar /home
scp remote
6 init 1 斷開網絡,在遠程不要執行
7 rm -rf /home/*
8 vim /etc/fstab
UUID=b0421d9a-8072-4be5-9526-070535ac0a8e /home ext4 defaults 0 0
9 mount -a
umount /mnt/home
10 init 5 還到原有模式

注意:跟 “/” 目錄無法遷移

3.將CentOS6的CentOS-6.9-x86_64-bin-DVD1.iso和CentOS-6.9-x86_64-bin-DVD2.iso兩個文件,合並成一個CentOS-6.9-x86_64-Everything.iso文件,並將其配置為yum源.

首先現將兩個光盤合成一個

mkdir /data/centos6.9    創建一個空文件夾
cp -av  /misc/cd/*   /data/centos6.9  # 將正在掛載這的光盤dvd1的內容復制進剛剛創建的centos6.9的空文件夾
eject #將dvd1彈出

再放入dvd2
\cp -av /misc/cd/*  /data/centos6.9  # 因為dvd1與dvd2有很多相同的文件,所以在cp前加\表示使用cp的原命令,否則復制過程中每一個相同的文件都會提醒是否覆蓋

mkisofs -r -o  CentOS-6.9-x86_64-Everything.iso   /data/centos6.9  # 制作iso
注意:制作的這個iso文件只能當yum源使用,無法作為系統啟動光盤,如果要作為系統啟動盤使用還需要去官網下載mkdvdiso腳本制作。

然后掛載

mount  -o loop  /data/ CentOS-6.9-x86_64-Everything.iso      /data/mnt

修改配置文件/etc/yum.repo.d/base.repo
最后

yum clean all
yum repolist 

 

4.創建一個2G的文件系統,塊大小為2048byte,預留1%可用空間,文件系統ext4,卷標為TEST,要求此分區開機后自動掛載至/test目錄,且默認有acl掛載選項.

fdisk  /dev/sdb   # 先分出一個2G的分區

mke2fs  -t ext4  -m 1  -b 2048  -L test   /dev/sdb1     # 創建文件系統,塊大小為2048byte,預留1%可用空間,文件系統ext4,卷標為TEST

vim  /etc/fstab      # 修改配置文件
UUID=cb17acad-ad9c-40b1-bab1-aa11a9ff9741 /test    ext4  defaults,acl  0 0    #添加此條

mount  -a

 

5.寫一個腳本,完成如下功能:

(1) 列出當前系統識別到的所有磁盤設備

(2) 如磁盤數量為1,則顯示其空間使用信息
否則,則顯示最后一個磁盤上的空間使用信息

#!/bin/bash
a=`lsblk -l | grep "sd[a-z]\>"  |wc -l`
b=`lsblk -l | grep "sd[a-z]\>" |cut -d" " -f1  |head -n1`
c=`lsblk -l | grep "sd[a-z]\>" |cut -d" " -f1  |tail -n1`


[ $a -eq 1 ]  && echo "`fdisk -l /dev/$b`"  || echo "`fdisk -l /dev/$c`"

 

注意:跟 “/” 目錄無法遷移


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM