主頁 > 作業系統 > linux 檔案系統管理三部曲之二:創建檔案系統

linux 檔案系統管理三部曲之二:創建檔案系統

2020-10-01 05:37:45 作業系統

創建檔案系統的含義:就是格式化一個硬碟磁區,不同的格式化方式,就是創建了不同的檔案系統,

格式化:

  • 低級格式化:劃分磁區前執行,主要是劃分硬碟的磁道等,

  • 高級格式化:劃分磁區后執行,創建檔案系統

    • 創建檔案系統時做的目的:當我們在硬碟上創建檔案后,以后可以用檔案的名字還能找到這個檔案,

      檔案包含2部分:

      • 元資料(包括:權限,屬主/組,時間戳,大小,資料塊指標等)

        資料塊指標:指向檔案內容在資料區的位置(根據檔案內容的大小,位置會有多個)

      • 資料本身的內容,

      創建檔案系統時,把整個磁區劃分成2個區域,一大一小,

      • 小的區域放每個檔案的元資料,叫元資料區(也叫:Inode table)

        每個檔案的元資料,叫 inode(index node)

      • 大的區域放檔案本身的內容,叫資料區

        資料區需要再次劃分成一堆block,block的大小一般是扇區的倍數,一個扇區是512bytes,

      • 元資料區和資料區圖例:

      • 元資料區和資料區的大小比例怎么決定呢?

        如果檔案的size小,而且檔案數量多,則會發生元資料區已經滿了,但是資料區還有很多空余,

        如果檔案的size大,而且檔案數量少,則會發生資料區已經滿了,但是元資料區還有很多空余,

  • 一般檔案:它的元資料里的資料塊指標區域,存放的是資料區的地址,占用磁區的資料區域的存盤空間,

  • 符號鏈接檔案:它的元資料里的資料塊指標區域,存放不是是資料區的地址,而是實際檔案的路徑,所以它不占用磁區的資料區域的存盤空間,它只占用元資料區域的存盤空間,

  • 設備檔案:它的元資料里的資料塊指標區域,存放不是是資料區的地址,而是主設備號和次設備號,所以它不占用磁區的資料區域的存盤空間,它只占用元資料區域的存盤空間,

查看檔案的inode編號,

  • 使用ls -i files,或者stat files

作業系統,如何知道哪些inode別使用了,哪些block被使用了?

搜索整個資料區域,肯定能知道block的使用情況,

搜索整個元資料區域,肯定能知道inode的使用情況,可是性能太低下了,

所以,在元資料區域找塊空間,存放2個東西,叫位圖索引(bitmap),

一個是inode的位圖索引(Inode bitmap),

一個是block的位圖索引(Block bitmap),

位圖索引的每個bit位對應一個inode/block,0代表此inode/block未被使用,1代表此inode/block已被使用,

搜索位圖索引,速度就快多了,

super block

若一個磁區里只有一個元資料區,一個資料區的話,即便有位圖索引,索引也是太多了,遍歷一遍也很費時間,所以實際的檔案系統,都是有多個元資料區和資料區,如下圖,每個元資料區和資料區組成一個獨立的邏輯磁區,獨立自治,每個邏輯磁區里,再建立位圖索引,有了邏輯磁區的話,還需要一個中央政府,去管理這些邏輯磁區,這個中央政府叫【super block】,

super block:記錄著邏輯磁區的資訊,

如果super block損壞了的話,那整個磁區就廢了,所以super block就必須做冗余處理,所以把super block放到了多個邏輯磁區的資料區里,如下圖:

inode里沒有存放檔案的名字,名字放哪里了呢?放目錄里了,目錄也是檔案,可不是windows里的檔案夾,

目錄的block里放的是:目錄里的檔案和檔案所對應的inode編號,

下圖表示了:元資料區,和資料區,和如何找到檔案/var/log/messages的

找到硬碟上的檔案后,就放到記憶體的【buff/cache】中,下次用戶再訪問此檔案就能快速的從記憶體中讀取到,

用free命令查看記憶體情況:

# free -h
              total        used        free      shared  buff/cache   available
Mem:           3.7G        336M        3.0G         13M        429M        3.1G
Swap:          3.9G          0B        3.9G

硬鏈接和符號鏈接的區別

作業系統能根據檔案路勁,找到它對應的inode編號,

  • 硬鏈接:

    • 創建硬鏈接命令:ln src link_file
    • 多個硬鏈接檔案,所對應的inode編號相同
    • 硬鏈接不能跨檔案系統,因為每個檔案系統的inode計數方式不同,
    • 創建硬鏈接會增加inode的參考計數,同樣洗掉硬鏈接會減少inode的參考技術,當inode的參考計數變成零時,是否資料區對應的空間,
    • 目錄不支持硬鏈接,防止回圈參考,
  • 符號鏈接:

    • 創建符號鏈接命令:ln -s src link_file
    • 符號鏈接檔案,有自己獨立的inode,
    • 可以跨檔案系統
    • 創建或洗掉符號鏈接,不影響inode的參考計數
    • 符號鏈接可以指向目錄
    • 符號鏈接的mode是777,但實際的mode還是要取決于它指向的檔案的mode
    • 符號鏈接的size是其指定的檔案的路徑字串的位元組數
      $ ls -l
      lrwxrwxrwx. 1 ys   ys   14 Dec 27 13:25 sl1 -> 符號鏈接11
      -rw-rw-r--. 1 ys   ys    0 Dec 27 13:24 符號鏈接11
      

Linux支持大部分的檔案系統,哪個檔案系統最好呢?沒有最好只有更好,

不同的檔案系統,適應不同的使用場景,

不同的檔案系統,對磁區的劃分方法都不一樣,對應讀寫檔案的程式來說,就太難了,不可能針對每種檔案系統,寫不同的代碼,那么,linux是如何解決這個問題的呢?使用VFS,

VFS:virtual FIle System虛擬檔案系統,

檔案讀寫程式,只跟VFS打交道,然后VFS和各個檔案系統打交道,

VFS給程式員統一的,簡潔的API介面,

Linux支持哪些檔案系統:

  • ext2,ext3,ext4:基本被淘汰了,單個檔案的大小有限制
  • xfs:紅帽7開始好像使用xfs了,centos7好像使用此檔案系統,特點:單個檔案的大小沒有限制
  • relserfs:能相對容易找回誤洗掉的檔案,但是作者入獄了,所以不是主流了,
  • btrfs:特點:單個檔案的大小沒有限制,性能好,但還是處于測驗階段,
  • iso9660:光碟(包括dvd和vcd)的檔案系統
  • nfs,cifs:網路檔案系統
  • gfs2,ocfs2:集群檔案系統
  • ceph:內核級分布式檔案系統
  • vfat(fat32),ntfs:windows的檔案系統
  • proc, sysfs, tmpfs, hugepagefs:偽檔案系統
  • UFS(unix檔案系統),FFS(fast檔案系統),JFS(日志檔案系統):Unix下的檔案系統,
  • swap:交換檔案系統
  • mogilefs,moosefs,glusterfs:用戶空間的分布式檔案系統,

檔案系統里的日志功能

由一個問題引出了檔案系統里的日志功能,

當往硬碟里寫入的時候,先去找一個空閑的inode,寫入元資料資訊,但是size在資料全部寫入完前,是不知道的,在寫入資料區的途中,突然斷電了,資料寫了一部分;再次開機的時候,作業系統為了檢查出壞資料,

就要掃描硬碟的inode區和資料區,找出壞的block,這樣一來開機的就太慢了,如何解決呢?日志功能(journal)登場了!

日志功能:

  • 在硬碟找一塊區域當日志區域,
  • 當要創建檔案的時候,先不往元資料區,寫入元資料資訊,而是往日志區域,寫入元資料資訊,
  • 然后寫入資料到資料區,當資料全部寫入到資料區后,把日志區的元資料,剪切到元資料區域,
  • 系統啟動時,只要看硬碟的日志區域,如果日志區域里有資料,就說明這是壞資料,加速了系統的系統速度,

日志功能的缺點:

  • 由于要從把日志區域的資料,剪切到元資料區域,增加了一次IO,

Linux里常用的檔案系統:ext2,ext3,ext4, xfs, relserfs, btrfs

只有ext2是無日志功能的,

檔案系統組成部分

  • 檔案系統驅動程式:由內核空間提供,

    檔案系統的驅動程式,可以選擇直接編譯到內核空間;也可以選擇作為一個module,安裝到內核空間,

    使用lsmod命令可以看到,內核安裝了哪些檔案系統的驅動程式module,

    # lsmod
    Module                  Size  Used by
    fuse                   91880  3
    xt_CHECKSUM            12549  1
    iptable_mangle         12695  1
    xfs                   997127  3
    

    如果發現想要的檔案系統的驅動程式module沒有在里面,也有可能是直接編譯到內核空間了,

    直接編譯到內核空間的檔案系統的驅動程式,不在lsmod結果里,

  • 檔案系統管理工具:由用戶空間的應用程式提供

檔案系統工具

1, 創建檔案系統的工具

  • mkfs:mkfs.ext2, mkfs.ext3, mkfs.ext4, mkfs.xfs, mkfs.vfat等

    可以用選項:-t指定安裝說明檔案系統,例:mkfs -t ext4= mkfs.ext4

    ext4兼容ext3,ext3兼容ext2.

    下面是創建ext2檔案系統:

    # fdisk -l /dev/sdb
    Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 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: 0x2594e4e1
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1            2048      411647      204800   83  Linux
    /dev/sdb2          411648      616447      102400    5  Extended
    /dev/sdb5          413696      516095       51200   83  Linux
    
    # mkfs.ext2 /dev/sdb1 #在/dev/sdb1里,安裝檔案系統ext2
    mke2fs 1.42.9 (28-Dec-2013)
    Filesystem label=識別設備的卷標
    OS type: Linux
    Block size=1024 (log=0)塊的大小,沒有指定大小,默認是1K
    Fragment size=1024 (log=0)
    Stride=0 blocks, Stripe width=0 blocks
    51200 inodes(創建了51200個inode), 204800 blocks(創建了204800個blocks)
    10240 blocks (5.00%) reserved for the super user(給管理員預留了5%的空間)
    First data block=1(第一個資料在編號為1的block)
    Maximum filesystem blocks=67371008
    25 block groups(把block分成了25個組)
    8192 blocks per group(每個組有8192個block), 8192 fragments per group
    2048 inodes per group(每個組有2048個block)
    Superblock backups stored on blocks:(super block存放在塊編號為下面的塊)
            8193, 24577, 40961, 57345, 73729
    
    Allocating group tables: done
    Writing inode tables: done
    Writing superblocks and filesystem accounting information: done
    # blkid /dev/sdb1 查看/dev/sdb1的檔案系統和UUID
    /dev/sdb1: UUID="4752177b-e026-483d-b166-19229b64e4c3" TYPE="ext2"
    

    下面是創建ext3檔案系統:和ext2相比,多了下面的存放日志的空間,

    Creating journal (4096 blocks): done

    # mkfs.ext3 /dev/sdb5
    mke2fs 1.42.9 (28-Dec-2013)
    Filesystem label=
    OS type: Linux
    Block size=1024 (log=0)
    Fragment size=1024 (log=0)
    Stride=0 blocks, Stripe width=0 blocks
    12824 inodes, 51200 blocks
    2560 blocks (5.00%) reserved for the super user
    First data block=1
    Maximum filesystem blocks=52428800
    7 block groups
    8192 blocks per group, 8192 fragments per group
    1832 inodes per group
    Superblock backups stored on blocks:
            8193, 24577, 40961
    
    Allocating group tables: done
    Writing inode tables: done
    Creating journal (4096 blocks): done
    Writing superblocks and filesystem accounting information: done
    # blkid /dev/sdb5
    /dev/sdb5: UUID="8f066109-6fcf-4c40-812a-66909b54469e" SEC_TYPE="ext2" TYPE="ext3"
    

    創建xfs檔案系統:

    centos5和6里沒有xfs,需要安裝,安裝命令:yum install xfsprogs

    # mkfs.xfs -f /dev/sdb5
    meta-data=https://www.cnblogs.com/dev/sdb5              isize=512    agcount=2, agsize=6400 blks
             =                       sectsz=512   attr=2, projid32bit=1
             =                       crc=1        finobt=0, sparse=0
    data     =                       bsize=4096   blocks=12800, imaxpct=25
             =                       sunit=0      swidth=0 blks
    naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
    log      =internal log           bsize=4096   blocks=855, version=2
             =                       sectsz=512   sunit=0 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    [root@localhost ~]# blkid /dev/sdb5
    /dev/sdb5: UUID="d73b8a2c-147d-4322-80a4-812553696c26" TYPE="xfs"
    

    yum小知識:查看用yum安裝的包里都包含哪些東西:

    # rpm -ql xfsprogs
    /usr/lib64/libhandle.so.1
    /usr/lib64/libhandle.so.1.0.3
    /usr/sbin/fsck.xfs
    /usr/sbin/mkfs.xfs
    /usr/sbin/xfs_admin
    /usr/sbin/xfs_bmap
    /usr/sbin/xfs_copy
    /usr/sbin/xfs_db
    /usr/sbin/xfs_estimate
    /usr/sbin/xfs_freeze
    /usr/sbin/xfs_fsr
    /usr/sbin/xfs_growfs
    /usr/sbin/xfs_info
    /usr/sbin/xfs_io
    /usr/sbin/xfs_logprint
    /usr/sbin/xfs_mdrestore
    /usr/sbin/xfs_metadump
    /usr/sbin/xfs_mkfile
    /usr/sbin/xfs_ncheck
    /usr/sbin/xfs_quota
    /usr/sbin/xfs_repair
    /usr/sbin/xfs_rtcp
    ...后面省略
    

    ext檔案系統專用管理程式:mke2fs

    • 語法:mke2fs [options] device

    • 指定檔案系統:-t

      mke2fs -t {ext2|ext3|ext4}

    • 指定blocksize:-b {1024|2048|4096}

      # mke2fs -t ext4 -b 2048 /dev/sdb5
      mke2fs 1.42.9 (28-Dec-2013)
      Filesystem label=
      OS type: Linux
      Block size=2048 (log=1)
      Fragment size=2048 (log=1)
      
    • 指定卷標(filesystem label):-L

      一般不指定卷標,因為容易重復,

      指定卷標后,用blkid命令就能看到卷標了,

      # mke2fs -t ext4 -L myLabel1 /dev/sdb5
      mke2fs 1.42.9 (28-Dec-2013)
      Filesystem label=myLabel1
      # blkid /dev/sdb5
      /dev/sdb5: LABEL="myLabel1" UUID="3bd32005-bea7-42bb-969e-3b37de466f3e" TYPE="ext4"
      

      卷標雖然重復了,但是UUID是不一樣的,

      # mke2fs -t ext4 -L myLabel1 /dev/sdb6
      mke2fs 1.42.9 (28-Dec-2013)
      Filesystem label=myLabel1
      # blkid /dev/sdb5
      /dev/sdb5: LABEL="myLabel1" UUID="3bd32005-bea7-42bb-969e-3b37de466f3e" TYPE="ext4"
      [root@localhost ~]# blkid /dev/sdb6
      /dev/sdb6: LABEL="myLabel1" UUID="7e71e3a9-5075-4b07-97fc-af7eefae27fc" TYPE="ext4"
      

      更改ext2,ext3,ext4的卷標:e2label

      • 查看磁區的卷標:e2label device
      • 修改磁區的卷標:e2label device LABEL
    • 創建有日志功能的檔案系統:-j

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

    • 每多少個位元組創建一個inode:-i

      指明inode與位元組的比率,

    • 指定inode的數量:-N 數字

      和用-i指定比率相比,直接指定inode的數量可能更好,

    • 指定inode的size:-I(大i)

      The inode-size value must be a power of 2 larger or equal to 128.

    • enable檔案系統某個特性:-O feature

      或者disable檔案系統某個特性:-O -feature后者-O ^feature

      feature一覽:用 man 5 ext4查看

      mke2fs -O has_journal device:啟動日志功能

    • 指定預留空間(super block)的大小的百分比:-m 數字(不需要加%,2就是2%)

      默認是預留5%,但是如果是100G的磁區,5G就太大了,

2,檢測及修復檔案系統的工具

因行程意外終止或系統崩潰(斷電)的原因,導致系統非正常終止時,可能會造成檔案損壞;此時,應該檢查并修復檔案系統,建議:離線進行

  • ext檔案系統系列:e2fsck

    • -y:對所有問題自動回答yes
    • -f:即使檔案系統處于clean狀態,也要強制行程檢查,
    # e2fsck -f /dev/sdb6
    e2fsck 1.42.9 (28-Dec-2013)
    Pass 1: Checking inodes, blocks, and sizes
    Pass 2: Checking directory structure
    Pass 3: Checking directory connectivity
    Pass 4: Checking reference counts
    Pass 5: Checking group summary information
    L1: 11/6400 files (0.0% non-contiguous), 2155/25600 blocks
    
  • 所有檔案系統:fsck

    # fsck.
    fsck.btrfs   fsck.ext2    fsck.ext4    fsck.minix   fsck.vfat
    fsck.cramfs  fsck.ext3    fsck.fat     fsck.msdos   fsck.xfs
    
    • -t:指明檔案系統型別

    • -a:無須互動自動修復所有錯誤(不建議使用)

      若有個2G的檔案,寫入了1.9G后,系統斷電,如果不修復還能保持1.9G,如果用-a修復,則把這1.9G也洗掉了,

    • -r:互動式修復

3,查看ext系列檔案系統的屬性和組的詳細資訊的工具:?dumpe2fs

  • 只查看屬性:-h

    # dumpe2fs -h /dev/sdb6
    dumpe2fs 1.42.9 (28-Dec-2013)
    Filesystem volume name:   L1
    Last mounted on:          <not available>
    Filesystem UUID:          c48a5e5a-2ebf-42e6-a191-87496b19e281
    Filesystem magic number:  0xEF53
    Filesystem revision #:    1 (dynamic)
    Filesystem features:      has_journal ext_attr resize_inode dir_index filetype sparse_super
    Filesystem flags:         signed_directory_hash
    Default mount options:    user_xattr acl
    Filesystem state:         clean
    Errors behavior:          Continue
    Filesystem OS type:       Linux
    Inode count:              6400
    Block count:              25600
    Reserved block count:     1536
    Free blocks:              23445
    Free inodes:              6389
    First block:              1
    Block size:               1024
    Fragment size:            1024
    Reserved GDT blocks:      99
    Blocks per group:         8192
    Fragments per group:      8192
    Inodes per group:         1600
    Inode blocks per group:   200
    Filesystem created:       Fri Dec 27 21:24:40 2019
    Last mount time:          n/a
    Last write time:          Fri Dec 27 22:19:54 2019
    Mount count:              0
    Maximum mount count:      -1
    Last checked:             Fri Dec 27 21:24:40 2019
    Check interval:           0 (<none>)
    Reserved blocks uid:      0 (user root)
    Reserved blocks gid:      0 (group root)
    First inode:              11
    Inode size:               128
    Journal inode:            8
    Default directory hash:   half_md4
    Directory Hash Seed:      ea467d23-e9b0-43ca-b762-f6b70ea21180
    Journal backup:           inode blocks
    Journal features:         (none)
    Journal size:             1029k
    Journal length:           1024
    Journal sequence:         0x00000001
    Journal start:            0
    
  • 組的詳細資訊:不加選項

    組的詳細資訊包括:

    • super block存盤在哪個塊
    • Reserved GDT blocks存盤在哪些塊
    • inode的位圖索引(Inode bitmap)存盤在哪些塊
    • block的位圖索引(Block bitmap)存盤在哪些塊
    • 組里的哪些塊是存盤元資料(Inode table)的
    • 多少個block是可以使用的;多少個inode是可以使用的;組里有幾個目錄,
    • 可以使用的block的編號是多少;可以使用的inode的編號是多少,
    # dumpe2fs /dev/sdb6
    此處省略了head的資訊,
    Group 0: (Blocks 1-8192)
      Primary superblock at 1, Group descriptors at 2-2
      Reserved GDT blocks at 3-101
      Block bitmap at 102 (+101), Inode bitmap at 103 (+102)
      Inode table at 104-303 (+103)
      7875 free blocks, 1589 free inodes, 2 directories
      Free blocks: 318-8192
      Free inodes: 12-1600
    Group 1: (Blocks 8193-16384)
      Backup superblock at 8193, Group descriptors at 8194-8194
      Reserved GDT blocks at 8195-8293
      Block bitmap at 8294 (+101), Inode bitmap at 8295 (+102)
      Inode table at 8296-8495 (+103)
      7889 free blocks, 1600 free inodes, 0 directories
      Free blocks: 8496-16384
      Free inodes: 1601-3200
    Group 2: (Blocks 16385-24576)
      Block bitmap at 16385 (+0), Inode bitmap at 16386 (+1)
      Inode table at 16387-16586 (+2)
      6961 free blocks, 1600 free inodes, 0 directories
      Free blocks: 17616-24576
      Free inodes: 3201-4800
    Group 3: (Blocks 24577-25599)
      Backup superblock at 24577, Group descriptors at 24578-24578
      Reserved GDT blocks at 24579-24677
      Block bitmap at 24678 (+101), Inode bitmap at 24679 (+102)
      Inode table at 24680-24879 (+103)
      720 free blocks, 1600 free inodes, 0 directories
      Free blocks: 24880-25599
      Free inodes: 4801-6400
    

4,調整ext系列檔案系統的特性:tune2fs

查看/調整ext2/ext3/ext4檔案系統的可調整屬性,不是所有屬性,比如block的大小就不能調整,

  • 查看super block里的資訊/查看檔案系統的layout資訊:-l

    # tune2fs -l /dev/sdb5
    tune2fs 1.42.9 (28-Dec-2013)
    Filesystem volume name:   myLabel1(卷標)
    Last mounted on:          <not available>(上次掛載,目前還沒有掛載過)
    Filesystem UUID:          3bd32005-bea7-42bb-969e-3b37de466f3e(UUID)
    Filesystem magic number:  0xEF53(魔數,標識檔案系統的)
    Filesystem revision #:    1 (dynamic)
    Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize(檔案系統啟用了哪些feature)
    Filesystem flags:         signed_directory_hash
    Default mount options:    user_xattr acl(檔案系統的掛載選項)
    Filesystem state:         clean(檔案系統狀態,clean:檔案系統一致,沒有損壞的檔案,如果有損壞的檔案就是dirty狀態,)
    Errors behavior:          Continue(錯誤時的處理,continue就是不管錯誤,繼續處理)
    Filesystem OS type:       Linux
    Inode count:              12824(inode的數量)
    Block count:              51200(block的數量)
    Reserved block count:     2560(預留給super block的數量)
    Free blocks:              44440(空閑的block數量)
    Free inodes:              12813(空閑的inode數量)
    First block:              1(第一個塊的編號)
    Block size:               1024(塊的大小,單位是byte)
    Fragment size:            1024
    Group descriptor size:    64
    Reserved GDT blocks:      256(預留給GDT的block數量)
    Blocks per group:         8192(每組里block的數量)
    Fragments per group:      8192
    Inodes per group:         1832(每組里inode的數量)
    Inode blocks per group:   229(每組有多少個塊,存放inode)
    Flex block group size:    16
    Filesystem created:       Fri Dec 27 16:48:53 2019
    Last mount time:          n/a
    Last write time:          Fri Dec 27 16:48:53 2019
    Mount count:              0
    Maximum mount count:      -1
    Last checked:             Fri Dec 27 16:48:53 2019
    Check interval:           0 (<none>)
    Lifetime writes:          4445 kB
    Reserved blocks uid:      0 (user root)
    Reserved blocks gid:      0 (group root)
    First inode:              11
    Inode size:               128(inode的大小)
    Journal inode:            8
    Default directory hash:   half_md4
    Directory Hash Seed:      05ca7d6b-d6b6-4e15-854f-e9d49f0f3f61
    Journal backup:           inode blocks
    
  • 把ext2升級到ext3:-j

    無損升級,不會損壞檔案系統里的檔案

    # blkid /dev/sdb6
    /dev/sdb6: UUID="c48a5e5a-2ebf-42e6-a191-87496b19e281" TYPE="ext2"
    # tune2fs -j /dev/sdb6
    tune2fs 1.42.9 (28-Dec-2013)
    Creating journal inode: done
    # blkid /dev/sdb6
    /dev/sdb6: UUID="c48a5e5a-2ebf-42e6-a191-87496b19e281" SEC_TYPE="ext2" TYPE="ext3"
    
    
  • 無損修改卷標:-L LABEL

    # tune2fs -L L1 /dev/sdb6
    tune2fs 1.42.9 (28-Dec-2013)
    [root@localhost ~]# blkid /dev/sdb6
    /dev/sdb6: LABEL="L1" UUID="c48a5e5a-2ebf-42e6-a191-87496b19e281" SEC_TYPE="ext2" TYPE="ext3"
    
  • 無損修改給super block預留的空間的百分比:-m 數字

    # tune2fs -m 6 /dev/sdb6
    tune2fs 1.42.9 (28-Dec-2013)
    Setting reserved blocks percentage to 6% (1536 blocks)
    
  • enable檔案系統某個特性:-O feature

    或者disable檔案系統某個特性:-O -feature后者-O ^feature

    disable日志功能后,檔案系統型別從原來的ext3變成了ext2;enable后又從ext2變成了ext3

    feature一覽:用 man 5 ext4查看

    # tune2fs -O ^has_journal /dev/sdb6
    tune2fs 1.42.9 (28-Dec-2013)
    # blkid /dev/sdb6
    disable日志功能后,檔案系統型別從ext3變成了ext2
    /dev/sdb6: LABEL="L1" UUID="c48a5e5a-2ebf-42e6-a191-87496b19e281" TYPE="ext2"
    # tune2fs -l /dev/sdb6
    feature里沒有了has_journal
    Filesystem features:      ext_attr resize_inode dir_index filetype sparse_super
    # tune2fs -O has_journal /dev/sdb6
    tune2fs 1.42.9 (28-Dec-2013)
    Creating journal inode: done
    # blkid /dev/sdb6
    /dev/sdb6: LABEL="L1" UUID="c48a5e5a-2ebf-42e6-a191-87496b19e281" SEC_TYPE="ext2" TYPE="ext3"
    # tune2fs -l /dev/sdb6
    Filesystem features:      has_journal ext_attr resize_inode dir_index filetype sparse_super
    
  • enable檔案系統的掛載選項:-o mount_options

    或者disable檔案系統的掛載選項:-o -mount_options后者-o ^mount_options

    具體的mount options可以在man tune2fs的-o選項出查看到,

    例如,disable acl(access control list,檔案的特殊權限控制功能),

    在centos7創建檔案系統時,acl是默認啟動的,

    只有在檔案系統這里,啟用了acl功能,getfacl,setfacl命令才有作用,

5,根據卷標(LABEL),UUID來定位設備:blkid

  • 查看設備的卷標和UUID

    # blkid /dev/sdb6
    /dev/sdb6: LABEL="L1" UUID="c48a5e5a-2ebf-42e6-a191-87496b19e281" SEC_TYPE="ext2" TYPE="ext3"
    
  • 根據卷標定位設備:-L

    # blkid /dev/sdb6
    /dev/sdb6: LABEL="L1" UUID="c48a5e5a-2ebf-42e6-a191-87496b19e281" SEC_TYPE="ext2" TYPE="ext3"
    # blkid -L L1
    /dev/sdb6
    
  • 根據UUID定位設備:-U

    # blkid /dev/sdb6
    /dev/sdb6: LABEL="L1" UUID="c48a5e5a-2ebf-42e6-a191-87496b19e281" SEC_TYPE="ext2"
    # blkid -U c48a5e5a-2ebf-42e6-a191-87496b19e281
    /dev/sdb6
    
    

swap檔案系統

linux上的swap檔案系統必須在獨立的磁區,且system id必須是82

window上的swap檔案系統,可以和作業系統在一個磁區,比如都在c盤,

1,創建swap檔案系統:mkswap

  • 不指定卷標和UUID,若原來的/dev/sdb6上有卷標和UUID,執行mkswap /dev/sdb6后,/dev/sdb6的卷標和UUID都被洗掉,且生成一個新的UUID,

    # mkswap /dev/sdb6
    mkswap: /dev/sdb6: warning: wiping old ext3 signature.
    Setting up swapspace version 1, size = 25596 KiB
    no label, UUID=c9f3ecb5-d82e-461a-9701-23a364792800
    

    注意:若/dev/sdb6原來的system id不是82,則執行mkswap /dev/sdb6后,system id是不會自動變成82的,還需要手動用fdisk-t選項,修改system id,

  • 指定卷標:-L LABEL

    # blkid -L L1
    [root@localhost ~]# mkswap -L L1 /dev/sdb6
    mkswap: /dev/sdb6: warning: wiping old swap signature.
    Setting up swapspace version 1, size = 25596 KiB
    LABEL=L1, UUID=3e848623-b82a-4a4f-9c58-53b868260208
    [root@localhost ~]# blkid -L L1
    /dev/sdb6
    [root@localhost ~]# blkid /dev/sdb6
    /dev/sdb6: LABEL="L1" UUID="3e848623-b82a-4a4f-9c58-53b868260208" TYPE="swap"
    
  • 指定UUID:-U UUID

vfat檔案系統

windows無法識別Linux的檔案系統,因此,存盤設備需要兩種系統之間交叉使用時,應該使用windows和linux都支持的檔案系統:fat32(vfat),

創建vfat檔案系統:mkfs.vfat device

# mkfs.vfat /dev/sdb5
mkfs.fat 3.0.20 (12 Jun 2013)
# c/c++ 學習互助QQ群:877684253 ![](https://img2018.cnblogs.com/blog/1414315/201811/1414315-20181106214320230-961379709.jpg) # 本人微信:xiaoshitou5854

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/144219.html

標籤:Linux

上一篇:CentOS7安裝Python3

下一篇:微服務相關命令

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • CA和證書

    1、在 CentOS7 中使用 gpg 創建 RSA 非對稱密鑰對 gpg --gen-key #Centos上生成公鑰/密鑰對(存放在家目錄.gnupg/) 2、將 CentOS7 匯出的公鑰,拷貝到 CentOS8 中,在 CentOS8 中使用 CentOS7 的公鑰加密一個檔案 gpg -a ......

    uj5u.com 2020-09-10 00:09:53 more
  • Kubernetes K8S之資源控制器Job和CronJob詳解

    Kubernetes的資源控制器Job和CronJob詳解與示例 ......

    uj5u.com 2020-09-10 00:10:45 more
  • VMware下安裝CentOS

    VMware下安裝CentOS 一、軟硬體準備 1 Centos鏡像準備 1.1 CentOS鏡像下載地址 下載地址 1.2 CentOS鏡像下載程序 點擊下載地址進入如下圖的網站,選擇需要下載的版本,這里選擇的是Centos8,點擊如圖所示。 決定選擇Centos8后,選擇想要的鏡像源進行下載,此 ......

    uj5u.com 2020-09-10 00:12:10 more
  • 如何使用Grep命令查找多個字串

    如何使用Grep 命令查找多個字串 大家好,我是良許! 今天向大家介紹一個非常有用的技巧,那就是使用 grep 命令查找多個字串。 簡單介紹一下,grep 命令可以理解為是一個功能強大的命令列工具,可以用它在一個或多個輸入檔案中搜索與正則運算式相匹配的文本,然后再將每個匹配的文本用標準輸出的格式 ......

    uj5u.com 2020-09-10 00:12:28 more
  • git配置http代理

    git配置http代理 經常遇到克隆 github 慢的問題,這里記錄一下幾種配置 git 代理的方法,解決 clone github 過慢。 目錄 git配置代理 git單獨配置github代理 git配置全域代理 配置終端環境變數 git配置代理 主要使用 git config 命令 git單獨 ......

    uj5u.com 2020-09-10 00:12:33 more
  • Linux npm install 裝包時提示Error EACCES permission denied解

    npm install 裝包時提示Error EACCES permission denied解決辦法 ......

    uj5u.com 2020-09-10 00:12:53 more
  • Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包

    Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包。 18 (flaskApi) [root@67 flaskDemo]# yum -y install nginx 19 已加載插件:fastestmirror, langpacks 20 Loading ......

    uj5u.com 2020-09-10 00:13:13 more
  • Linux查看服務器暴力破解ssh IP

    在公網的服務器上經常遇到別人爆破你服務器的22埠,用來挖礦或者干其他嘿嘿嘿的事情~ 這種情況下正確的做法是: 修改默認ssh的22埠 使用設定密鑰登錄或者白名單ip登錄 建議服務器密碼為復雜密碼 創建普通用戶登錄服務器(root權限過大) 建立堡壘機,實作統一管理服務器 統計爆破IP [root ......

    uj5u.com 2020-09-10 00:13:17 more
  • CentOS 7系統常見快捷鍵操作方式

    Linux系統中一些常見的快捷方式,可有效提高操作效率,在某些時刻也能避免操作失誤帶來的問題。 ......

    uj5u.com 2020-09-10 00:13:31 more
  • CentOS 7作業系統目錄結構介紹

    作業系統存在著大量的資料檔案資訊,相應檔案資訊會存在于系統相應目錄中,為了更好的管理資料資訊,會將系統進行一些目錄規劃,不同目錄存放不同的資源。 ......

    uj5u.com 2020-09-10 00:13:35 more
最新发布
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:43:21 more
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:42:36 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:26:53 more
  • 設定Windows主機的瀏覽器為wls2的默認瀏覽器

    這里以Chrome為例。 1. 準備作業 wsl是可以使用Windows主機上安裝的exe程式,出于安全考慮,默認情況下改功能是無法使用。要使用的話,終端需要以管理員權限啟動。 我這里以Windows Terminal為例,介紹如何默認使用管理員權限打開終端,具體操作如下圖所示: 2. 操作 wsl ......

    uj5u.com 2023-04-19 09:25:49 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:19:04 more
  • Linux學習筆記

    IP地址和主機名 IP地址 ifconfig可以用來查詢本機的IP地址,如果不能使用,可以通過install net-tools安裝。 Centos系統下ens33表示主網卡;inet后表示IP地址;lo表示本地回環網卡; 127.0.0.1表示代指本機;0.0.0.0可以用于代指本機,同時在放行設 ......

    uj5u.com 2023-04-18 06:52:01 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:50 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:01 more
  • 你是不是暴露了?

    作者:袁首京 原創文章,轉載時請保留此宣告,并給出原文連接。 如果您是計算機相關從業人員,那么應該經歷不止一次網路安全專項檢查了,你肯定是收到過資訊系統技術檢測報告,要求你加強風險監測,確保你提供的系統服務堅實可靠了。 沒檢測到問題還好,檢測到問題的話,有些處理起來還是挺麻煩的,尤其是線上正在運行的 ......

    uj5u.com 2023-04-05 16:52:56 more
  • 細節拉滿,80 張圖帶你一步一步推演 slab 記憶體池的設計與實作

    1. 前文回顧 在之前的幾篇記憶體管理系列文章中,筆者帶大家從宏觀角度完整地梳理了一遍 Linux 記憶體分配的整個鏈路,本文的主題依然是記憶體分配,這一次我們會從微觀的角度來探秘一下 Linux 內核中用于零散小記憶體塊分配的記憶體池 —— slab 分配器。 在本小節中,筆者還是按照以往的風格先帶大家簡單 ......

    uj5u.com 2023-04-05 16:44:11 more