1. 程式人生 > 其它 >Qt 自定義資料結構序列化與反序列化

Qt 自定義資料結構序列化與反序列化

磁碟裝置的裝置檔案命名:

/dev/DEV_FILE
/dev/sdx    #SAS,SATA,SCSI,IDE
#不同磁碟標識:a-z,aa-az  ,例如:sda,sdb  
#同一裝置不同分割槽:1,2...     例如:sda1,sda2 
dev/nvme0n    第一個nvme0n1,第二個nvme0n2      #nvme協議硬碟

虛擬硬碟:
/dev/xd
/dev/xvd
識別SSD和機械硬碟型別:
lsblk -s -o name,rota    #1表示機械,0表示SSD
機械硬碟:
HDD 機械硬碟即是傳統普通硬碟,主要由:碟片,磁頭,碟片轉軸及控制電機,磁頭 控制器,資料轉換器,介面,快取等幾個部分組成 

固態硬碟:
SSD 用固態電子儲存晶片陣列而製成的硬碟,由控制單元和儲存單元(FLASH晶片、 DRAM晶片)組成 

相較於HDD,SSD在防震抗摔、傳輸速率、功耗、重量、噪音上有明顯優勢,SSD 傳輸速率效能是HDD的2倍 

相較於SSD,HDD在價格、容量佔有絕對優勢

硬碟儲存術語:

head:磁頭
track:磁軌
sector:扇區,512位元組
cylinder:柱面    1柱面=512*扇區數/磁軌*磁頭數

磁碟分割槽

磁碟分割槽方式MBR、GPT:

為什麼要分割槽
	優化I/O效能
	實現磁碟空間配額限制
	提高修復速度
	隔離系統和程式
	安裝多個OS
	採用不同檔案系統

MBR分割槽

MBR:主引導記錄,最多4個分割槽,也可以3個主分割槽,一個擴充套件分割槽(n個邏輯分割槽),最大支援2TB的硬碟,主和擴充套件發分割槽對應的1-4,/dev1/sda3,邏輯分割槽從5開始,/dev/sda5
MBR分割槽 
硬碟前512位元組為硬碟資訊
前446位元組:boot loder 作業系統載入程式
後64位元組:分割槽表,每16位元組表示一個分割槽 
最後2位元組:55aa 標記位

範例:備份MBR的分割槽表,並破壞後恢復

#備份MBR分割槽表
dd if=/dev/sda of=/data/dpt.img bs=1 count=64 skip=446
scp /data/dpt.img 10.0.0.102:

#破壞MBR分割槽表
dd if=/dev/zero of=/dev/sda bs=1 count=64 seek=446

#無法啟動
reboot

#用光碟啟動,進入rescue  made,選第3項skip to shell

#配置網路
#ifconfig ens160 10.0.0.8/24
#ip a a 10.0.0.8/24 dev/ens160

#scp 10.0.0.102:/root/dpt.img 

#恢復MBR分割槽表
#dd if=dpt.img of=/dev/sda bs=1 seek=446
#reboot

GPT分割槽

全域性唯一標識分割槽表,又稱GUID,支援128個分割槽,大容量硬碟,大 容量的優勢在今後的發展,GPT分割槽會逐漸取代MBR分割槽

GRT分割槽結構分4個區域:
   GPT
   分割槽表
   GPT分割槽
   備份區域

分割槽管理常用命令:

列出硬碟資訊(塊裝置)

lsblk          

建立分割槽

fdisk   和  gdisk	#分別是管理MBR分割槽    管理GPT分割槽
       -l 檢視分割槽型別與磁碟資訊

fdisk    子命令:
		p  分割槽列表
		n  建立分割槽
        d  刪除分割槽
		w  儲存退出 
    	t  更改分割槽型別
    	v  校驗分割槽
    	u  轉換分割槽
        q  不儲存並退出
    
parted      #高階分割槽操作,可以是互動式或非互動式

檢視核心是否已經識別新的分割槽

cat /proc/partations

Centos7,8 同步修改後分割槽資訊

partprobe /dev/sda

centos 6 同步修改後分割槽資訊

增加:partx -a  /dev/sda       刪除:partx -d --nr 6-8  /dev/sda

檔案系統

常見的檔案系統

ext4:Linux系統下的日誌檔案系統。是ext系列的最新版,修復速度快,最大支援1EB的檔案系統 
xfs:根據所記錄的日誌在很短的時間內迅速恢復磁碟檔案內容,支援最大8EB 的檔案系統
NTFS:最多隻能支援16EB的檔案系統和16EB的檔案,windows常用檔案系統

檢視當前支援的檔案系統:
cat /etc/filesystems

檔案系統管理工具

檢視分割槽檔案系統
	 blkid
	    -U:根據指定UUID查詢對應的裝置
	    -L:根據指定LABEL查詢對應的裝置
 	df -Th  檔案系統空間實際真正佔用等資訊的檢視
	lsblk -f
	
mkfs    建立,修改,格式化檔案系統
     -t 指定檔案系統 
     /dev/sda1 -L 設定卷標 
#注意:適用mkfs命令之前要將分割槽取消掛載 

fsck    #檔案系統修復,檢查 
       fsck -t ext4 /dev/sda1 
#注意:使用fsck命令之前要將分割槽取消掛載,fsck字尾要與檔案系統相同

檔案系統 掛載:mount

mount  或者cat etc/mtab      #檢視所有的掛載
umount       取消掛載
mount  -a    掛載生效
findmnt  MOUNT_POINT|device    #檢視掛載點情況
lsof   MOUNT_POINT           #檢視正在訪問指定檔案系統的程序

掛載規則:

一個掛載點同一時間只能掛載一個裝置
一個掛載點同一時間掛載了多個裝置,只能看到最後一個裝置的資料,其他裝置上的資料將被隱藏
一個裝置可以同時掛載到多個掛載點
通常掛載點一般是已存在空的目錄

持久掛載:

vim   /etc/fstab

裝置檔案:/dev/sda1或UUID
掛載點(必須是事先存在的目錄):/data 
檔案系統型別:   ext4   
掛載選項:   defaults   
轉儲頻率:0:不做備份   1:每天轉儲 2:每隔一天轉儲

/dev/sda1或UUID	/data 	ext4    defaults   1  2

swap分割槽:

概念:swap交換分割槽是系統RAM的補充,swap分割槽支援虛擬記憶體。當記憶體不足時 會將資料存入awap分割槽,當系統缺乏swap空間時,核心會因記憶體耗盡而終止進 程。配置過多swap空間會造成記憶體處於分配狀態但閒置,所以要合理分配swap 分割槽。

交換分割槽實現過程:

建立交換分割槽或者檔案
使用mkswap寫入特殊簽名
再/etc/fstab檔案中新增適當的條目
使用swapon -a  啟用交換空間

1,fdisk /dev/sda3  根據提示建立swap分割槽
2,blkid 		   檢視swap分割槽資訊UID等
3,vim /etc/fstab   寫入配置檔案中 
4,swapon -a 	   生效swap分割槽
5,free -h 		   檢視
禁用swap分割槽
  sed -i.bak '/swap/d' /etc/fstab   
  swapoff -a    禁用

swap使用策略

cat  /proc/sys/vm/swappiness     檢視
說明:預設值為30,值越大就越傾向於使用swap,可以設定為0,這樣並不會禁止對swap的使用,只是最大限度地降低了使用swap的可能性

dd命令:

dd  if=/dev/zero  of=/data/f1  bs=10M  count=100
if=file      從所命名檔案讀取而不是從標準輸入
of=file      寫到所命名的檔案而不是到標準輸出
bs=size      指定塊大小
skip=blocks  從開頭忽略blocks個ibs大小的塊
seek=blocks  從開頭忽略blocks個obs大小的塊

範例:
#備份MBR
dd if=/dev/sda  of=/tmp/mbr.bak  bs=512  count=1
#破壞MBR中的bootloader
dd if=/dev/zero  of=/dev/sda  bs=64  count=1  seek=446
#將本地的/dev/sdx整盤備份到/dev/sdy
dd if=/dev/sdx  of=/dev/sdy
#將/dev/sdx/全盤資料備份到指定路徑image檔案
dd if=/dev/sdx of=/path/to/image
#備份/dev/sdx全盤資料,並利用gzip壓縮,儲存到指定路徑
dd if=/dev/sdx | gzip >/path/to/image.gz
#將備份檔案恢復到指定盤
dd if=/path/to/image of=/dev/sdx
#將壓縮的備份檔案恢復到指定盤
dd if=/dev/mem of=/room/mem.bin bs=1024
#銷燬磁碟資料
dd if=/dev/urandom of=/dev/sda1
#測試硬碟寫速度
dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
#測試硬碟讀速度
dd if=/root/1Gb.file bs=64k | dd of=/dev/null

RAID:

RAID指將多個磁碟合成一個“陣列”來提供更好的讀寫效能與冗餘

RAID實現的方式:

外接式磁碟陣列:通過擴充套件卡提供適配能力
內接式RAID:主機板整合RAID控制器,安裝OS前在BIOS裡配置
軟體RAID:通過OS實現

RAID級別:

RAID 0:最少磁碟數2,兩塊硬碟空間合併,無容錯能力 
RAID 1:最少磁碟數2,兩塊硬碟儲存相同資料,有冗餘能力
RAID 4:最少磁碟數3,有冗餘能力,多塊資料盤異或運算值存於專用校驗盤 
RAID 5:最少硬碟數3,每塊硬碟有一個校驗區,有容錯能力,允許最多1塊磁 盤損壞
RAID 6:最少硬碟數4,每個硬碟有兩個校驗區,比RAID5更強容錯能力,允許 最多1塊磁碟損壞
RAID 10:最少硬碟數4,讀、寫效能提升,有容錯能力:每組映象最多隻能壞 一塊,多塊磁碟先實現RAID1,再組合成RAID0
JBOD:將多塊不同大小磁碟的空間合併一個大的連續空間使用

邏輯卷管理器(LVM)

LVM可以允許對捲進行方便操作的抽象層,包括重新設定檔案的大小,允許在多個物理裝置間重新組織檔案系統

pv物理卷        vg卷組        lv邏輯卷

命令:

 		檢視卷:  pv/lv/vg display(pvdisplay)    
 		建立卷:  pv/lv/vg create      
	 	刪除卷:  pv/lv/vg remove     

建立邏輯卷:

1、pvcreate /dev/sda1           #建立物理卷
2、vgcreate vg1 /dev/sda1       #建立卷組並加入物理卷 
3、lvcreate -L 3G -n sy vg0     #在卷組下建立3G邏輯卷並取名為 sy 
4、ll /dev/vg0/sy               #檢視卷組下的邏輯卷
5、mkfs.xfs /dev/vg0/sy         #建立邏輯卷檔案系統
6、mkdir /mnt/sy                #建立邏輯卷掛載目錄 
7、mount /dev/vg0/sy /mnt/sy    #掛載邏輯卷
8、vim /etc/fstab               #將掛載永久儲存

擴充套件邏輯卷:

1、pvcreate /dev/sda2              #建立物理卷 
2、vgextend vg0 /dev/sda2          #新增物理捲到vg0卷組中
3、lvextend -r -l +3G /dev/vg0/sy  #擴充套件邏輯卷

邏輯卷快照

#為現有邏輯卷建立快照
lvcreate -l  64  -s -n data-snapshot   /mnt/snap   
#掛載快照
mkdir -p /mnt/snap
mount -o ro,nouuid /dev/vg0/data-snapshot
#恢復快照
umount /dev/vg0/data-snapshot
umount /dev/vg0/data
lvconvert --merge /dev/vg0/data-snapshot
#刪除快照
umount /mnt/snap
lvremove /dev/vg0/data-snapshot

範例:請描述將一塊空間大小為 500G 的新硬碟新增到伺服器的詳細過程

準備:插入一塊500G硬碟
1,echo ' - - - ' > /sys/class/scsi_host/host{0..*}/scan      #掃描出硬碟
2,lsblk     #檢視硬碟
3,fdisk /dev/sda 分割槽 n..P..W..
		n p 1 \r +1G p 				#完成boot分割槽 
		n p 2 \r +100G p 			#完成根分割槽 
		n p 3 \r +50G p 			#完成data分割槽
		n p \r +2G p t 4 L 82 p w   #完成swap分割槽並推出 
4,partprobe /dev/sda 		#同步分割槽表
5,lsblk -f 					#檢視分割槽是否完成 
6,mkfs.ext4 /dev/sda1 		#設定檔案系統
7,mkfs.ext4 /dev/sda2 		#設定檔案系統
8,mkfs.ext4 /dev/sda3 		#設定檔案系統
9,mkswap /dev/sda3 			#設定swap分割槽檔案系統 
10,cat > /etc/fstab <<EOF 將磁碟寫入開機掛載
/dev/sda2	 /          ext4 	defaults 	0 0
/dev/sda1 	/boot		 ext4	 defaults 	0 0
/dev/sda3 	/data 	 ext4 	defaults 	0 0
/dev/sda4 	swap 		 swap 	defaults 	0 0
EOF
11,mount -a    #生效