1. 程式人生 > >Linux 基礎知識(四)

Linux 基礎知識(四)

GPT是什麼?

GUID磁碟分割槽表(GUID Partition Table,縮寫:GPT)其含義為“全域性唯一標識磁碟分割槽表”,是一個實體硬碟的分割槽表的結構佈局的標準。它是可擴充套件韌體介面(EFI)標準(被Intel用於替代個人計算機的BIOS)的一部分,被用於替代BIOS系統中的一64bits來儲存邏輯塊地址和大小資訊的主開機紀錄(MBR)分割槽表

 
 
GPT有哪些功能?

  • 在MBR硬碟中,分割槽資訊直接儲存於主引導記錄(MBR)中(主引導記錄中還儲存著系統的載入程式)。但在GPT硬碟中,分割槽表的位置資訊儲存在GPT頭中。但出於相容性考慮,硬碟的第一個扇區仍然用作MBR,之後才是GPT頭。
  • 跟現代的MBR一樣,GPT也使用邏輯區塊位址(LBA)取代了早期的CHS定址方式。傳統MBR資訊儲存於LBA 0,GPT頭儲存於LBA 1,接下來才是分割槽表本身。64位Windows作業系統使用16,384位元組(或32扇區)作為GPT分割槽表,接下來的LBA 34是硬碟上第一個分割槽的開始。
  • 蘋果公司曾經警告說:“不要假定所有裝置的塊大小都是512位元組。”一些現代的儲存裝置如固態硬碟可能使用1024位元組的塊,一些磁光碟(MO)可能使用2048位元組的扇區(但是磁光碟通常是不進行分割槽的)。一些硬碟生產商在計劃生產4096位元組一個扇區的硬碟,但截至2010年初,這種新硬碟使用韌體對作業系統偽裝成512位元組一個扇區。
  • 使用英特爾架構的蘋果機也使用GPT。
  • 為了減少分割槽表損壞的風險,GPT在硬碟最後儲存了一份分割槽表的副本

 
 
Parted用法個常用選項:

用法:parted [選項]… [裝置 [ 命令 [引數]… ]… ]

將帶有引數的命令用於裝置。如果沒有出現命令,則以互動模式執行。

幫助選項:

-h,--help 顯示此幫助資訊

-l , --list 列出所有裝置的分割槽資訊

-I , --interactive 在必要是,提示使用者

-s, --script 從不提示使用者

-v , --version 顯示版本

建立一個10G分割槽,並格式為ext4檔案系統

  • 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA,預設掛載屬性包含acl;
  • 掛載至/data/mydata目錄,要求掛載時禁止程式自動執行,且不更新檔案的訪問時間戳;
  • 可開機自動掛載

建立分割槽

fdisk  /dev/sdc
Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 
First sector (2048-41943039, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +10G
Partition 1 of type Linux and of size 10 GiB is set

Command (m for help): w
The partition table has been altered!

重讀磁碟分割槽表

kpartx -af /dev/sdc

顯示分割槽

fdisk -l /dev/sdc  

Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 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: 0xb5878e08

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048    20973567    10485760   83  Linux

建立檔案系統

方法一

mke2fs -t ext4 -b 2048 -L MYDATA -m 2 /dev/sdb1

方法二

mkfs.ext4 -b 2048 -L MYDATA -m 2 /dev/sdb1

建立掛載目錄

mkdir -pv /data/mydaa

配置自動掛載

vim /etc/fstab
/dev/sdb1   /data/mydata  ext4   defaults,noexec,noatime  0 0

 
 

建立一個大小為1G的swap分割槽,並啟用。

建立分割槽

fdisk  /dev/sdc   
Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
Partition number (2-4, default 2): 
First sector (20973568-41943039, default 20973568): 
Using default value 20973568
Last sector, +sectors or +size{K,M,G} (20973568-41943039, default 41943039): +1G
Partition 2 of type Linux and of size 1 GiB is set

Command (m for help): t
Partition number (1,2, default 2): 
Hex code (type L to list all codes): 82
Changed type of partition 'Linux' to 'Linux swap / Solaris'

Command (m for help): p

Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 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: 0xb5878e08

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048    20973567    10485760   83  Linux
/dev/sdc2        20973568    23070719     1048576   82  Linux swap / Solaris

Command (m for help): w
The partition table has been altered!

重讀磁碟分割槽表

kpartx -af /dev/sdc

建立交換分割槽

mkswap /dev/sdb2

建立自動掛載

vim /etc/fstab
/dev/sdb2    swap    swap    defaults        0 0

顯示交換分割槽

swapon --show

方法二

dd if=/dev/zero of=/swapfile bs=1G count=1
chmod 600 /swapfile
mkswap /swapfile
vim /etc/fstab
/swapfile         swap       swap    defaults      0 0

 
 

編寫指令碼計算/etc/passwd檔案中的第10個使用者和第20個使用者的id號之和

#!/bin/bash
#
id1=$(head -10 /etc/passwd | tail -1 | awk -F : '{print $3}')
id2=$(head -20 /etc/passwd | tail -1 | awk -F : '{print $3}')
echo sum=$[$id1+$id2]

 
 

當前主機名稱儲存至hostName變數中;主機名如果為空,或者為localhost.localdomain,則將其設定為www.magedu.com

hostName=$(hostname)
[ -z "$hostName" -o "$hostName" == "localhost.localdomain" -o "$hostName" == "localhost" ] && hostname www.magedu.com     

 
 

編寫指令碼,通過命令列引數給定一個使用者名稱,判斷其ID號是偶數還是奇數

#!/bin/bash
#
if  [ $[ $(id -u $1)%2 ] -eq 0 ]
then
echo $1 ID is  Even numbers
else
echo $1 ID is  Odd numbers
fi

方法二

#!/bin/bash
#
[ $[ $(id -u $1)%2 ] -eq 0 ] && echo $1 ID is  Even numbers || echo $1 ID is  Odd numbers