# 備份的類型、管理、DR site、RAID、實作
- Book mode: https://hackmd.io/@ncnu-opensource/book
[TOC]
## 備份重要性 & 起源
### 備份是什麼?
- 將原本資料再複製一份,用來做**額外的保存**來保護資料
- 如果今天原本資料遺失或損壞時,還可以使用複製的這一份資料
- 而資料的遺失或損壞有很多原因 :
- 硬體損壞
- 軟體有缺陷
- 人為的疏失
>手殘誤刪檔案
- 勒索軟體攻擊
- 用處
- 可以透過平時備份系統資料或是檔案,以便在系統因資料毀損、遺失或受到勒索軟體攻擊時,可以透過**還原備份的檔案、恢復系統正常運作**。
### 起源 : 從 Punch Cards 到 Cloud

>[圖片來源](https://www.cloudally.com/blog/history-of-data-backup/)
- 打孔卡 (Punch Cards)
- 1800 年代的工業革命出現,增加了資料在各種業務中使用的需求
- 利用打孔卡收集以及儲存資料
- 最早將資料程式化的方式來儲存
::: info
早在 19 世紀,法國就開發了穿孔卡技術來控制紡織機。紡織工人可以輸入一張紙,工廠會使用字符串讀取紙,自動創建圖案。
:::
- 缺點是不可靠、容易損壞
- 磁帶 (Magnetic Tape)
- 1951 年發明了第一台磁帶機
- 可儲存空間比打孔卡大 1,000 倍
- 開始使用電腦進行資料的處理,增加對備份儲存的需求
:::success
意識到**資料儲存**是整體工業運作的主軸,**提升資料的重要性,從而提升了備份的意識**
:::
- 備份時間長
- Floppy, CDs, DVDs
- 1970 年代開始出現
- 便攜性高、成本效益超越了磁帶,資料可以很容易地在設備之間儲存和移動
- Hard Disk Drive, SD cards, and Flash Drives
- 1950 年代,IBM 開發了第一個 HDD
- **太貴**
- 儲存量只有 5MB
- 體型龐大,重量高達一頓
- 1990 年代,HDD 才重新流行起來。
- 主因是**成本降低、 HDD 容量增加**
- 優點: 速度快、容量大
- Cloud 雲端
- 2000 年代
- 開始出現了新型的網路儲存方式 (Network Attached storage)
- 2010 年後
- 才開始有了這個「Cloud」的名詞
- 好處:
- 透過網路共享資源,協助共同協作
- 擴展性增加,不需受地區限制
- 方便異地備份
>通常會有不只一個備份的伺服器,分散儲存於全球不同的地方

>[圖片來源](https://www.cloudally.com/blog/history-of-data-backup/)
> 參考資料來源 :
> - [History of Data Backup – From Tape to Cloud](https://www.cloudally.com/blog/history-of-data-backup/)
### 怎麼樣才可以稱得上是好的備份 ?
- 能還原的才可以算是備份
- 可以保留這份檔案先前的版本
- 至少要有一份**異地備份**
- 使用多種備份解決方案
- EX:on-site 和 off-site 使用的儲存媒體與技術不同
:::info
### on-site & off-site
- 依據將備份地區來分為兩種 :
- on-site backup( 本地備份 )
- off-site backup (異地備份 )
#### on-site backup( 本地備份 )
- 將資料備份於本地存放
- 常使用的儲存媒體技術 : 硬碟、 DVD/CD
#### off-site backup (異地備份 )
- 將資料備份於異地存放
- 常使用的儲存媒體技術 : 遠端 Server 、磁帶(放置到其他地方保存)
> 參考資料 :
> 1. [off-site backup](https://www.techtarget.com/searchdatabackup/definition/off-site-backup)
> 2. [What is Offsite Backup vs Onsite Backup?](https://www.datto.com/blog/what-is-offsite-backup-vs-onsite-backup)
> 3. [Difference Between Onsite and Offsite Data Backup](https://www.backupassist.com/education/articles/difference-between-onsite-and-offsite-data-backup.html)
:::
- 可以進行**測試還原**,確保能正確還原
- 還原的時候可以有選擇的還原
> 備份檔案時會有版本控制,每一次更新都會有新紀錄,以便將來查閱特定版本修訂情況的系統
> 復原到特殊時間點時的系統與檔案狀態
- 備份檔案要**可以打開並查閱**
- 在備份前須**預想到所有可能發生的危機**,並且皆能有有效的解決方案
:::success
**結論:備份的重點是要能夠回朔**
>[name= BT]
:::
<!-- 回到壞掉前的狀態 -->
> [ 資料來源 ](https://hackmd.io/@t4lm0Dd9QcqI4MhgvDzlUg/H1mjRQiId)
#### 基本備份原則: Backup 3-2-1 原則
- 至少備份 3 份
- 至少要儲存於 2 種不同的儲存媒體
>例 : 光碟、外接硬碟、USB、雲端儲存空間
- 至少要有 1 份於異地保存
> 例: 常使用雲端儲存空間
:::info
### World Backup Day ( 世界備份日 ) 3/31
- 是一個強調資料安全性與備份的日子
- 目的 : 了解資料在我們生活中日益重要的趨勢,來提高備份和資料保存意識
>訂於 4/1 日以前,除了想引起注意,同時也想降低因愚人節被整而丟失資料的風險
- 紀念日宣言 : 「I solemnly swear to backup my important documents and precious memories on March 31st.」
> 「我鄭重宣示,我會在 3 月 31 號備份我重要的檔案與珍貴的回憶」
- 調查顯示 :
- 21% 的人從未備份過
- 每分鐘有 113 隻手機被偷或是遺失
- 29% 的資料遺失案件是意外造成的
- **30% 的電腦已經感染了惡意軟體**
>[官網有更多的詳細資訊](https://www.worldbackupday.com/en)
:::
### 如果不重視備份會發生什麼事?
- 勒索軟體
- 去年10月,依據趨勢科技調查顯示台灣企業 :
- 全球供應鏈的規模擴大
- 72% 供應鏈曾遭勒索病毒攻擊
- 76% 供應鏈除了曾遭勒索病毒攻擊,並且遭受駭客支付贖金的請求
- 61% 企業的供應鏈大部分是由資安防護通常較弱的中小企業所組成

>[ 圖片來源 ](https://blog.trendmicro.com.tw/?p=74248)

- 天災人禍
- Kakao 通訊軟體 去年 10 月資料中心火災,**癱瘓整個韓國日常生活** :
- 南韓**市佔率超過九成** 的「國民通訊軟體」KAKAO 資料中心發生火災,造成通訊、地圖、音樂、電子支付等服務全數中斷
- 所有資料在其他資料中心都有備份,事故發生後公司內部也立即啟動因應措施
- 坦言考慮不周,「雖然預先準備風險因應方案,但火災並不在預想中」
- 南韓總統尹錫悅要求查明此次故障原因並**擬定備份計劃**
> [新聞來源](https://www.thenewslens.com/article/174962)
:::success
#### 結論:
不管是企業還是每個人都應該要有備份的觀念,
所謂天有不測風雲,人有旦夕禍福,
應該要養成備份的習慣或是制定備份的計畫以及應變措施
否則當遇到真的危機時,真的就岌岌可危了,損失程度小則個人大則至國安危機
:::
## 備份的類型
### Full Backup ( 完整備份 )
- 完整複製一份資料
- 比起其他方式,資料備份所花的時間較長
- 復原資料較快
- 記憶體占用空間大
### Incremental Backup ( 增量備份 )

> [圖片來源](http://diun69.blogspot.com/2020/12/blog-post.html)
- 一開始會進行完整備份,之後只會備份與 **上一次備份** 的有差異的資料
- 記憶體佔用空間小
- 比起其他方式,資料備份的時間最快
> 因為只要備份與上一次備份有差異的資料即可
- 復原資料最慢
### Differential Backups ( 差異備份 )

> [圖片來源](http://diun69.blogspot.com/2020/12/blog-post.html)
- 一開始會進行完整備份,之後只會備份與 **上一次完整備份** 有差異的資料
- 比起完整備份,資料備份所花的時間較快

| | Full Backup | Differential Backups | Incremental Backup |
| -------------- | ----------- | -------------------- | ------------------ |
| 中文 | 完整 / 全部 / 完全備份 | 差異備份 | 增量備份 |
| 備份速度 | 慢 ☹ | 中 | 快 😊 |
| 復原速度 | 快 😊 | 中 | 慢☹ |
| 占用空間 | 最多 ☹ | 中 | 最少 😊 |
| 花費 | 貴 ☹ | 中 | 便宜🙂 |
### 混合式備份
透過上述的三種備份方式來交替組合,以循環的方式來進行不同的備份方式,藉此降低單一個別備份的風險
#### GFS 輪替原則/三代輪替原則 Grandfather-Father-Son Rotation
- 目的 : 透過**階層式混合**了不同種的備份方式,確保過去一段時間內的資料都會被備份
>即使發生有惡意程式潛伏之類的情況也能往前回朔到一定的時間內,同時又不會花太多的空間和成本在保存備份上,算是一個在可用性和安全性上取得的一個平衡。
- 三代等級 :
- <span style="background-color: #72B747">**祖父 (Grandfather)**</span> : 每個月做一次完整備份 (Full Backup),每個備份會被保存一年
- <span style="background-color: #FEDDD6">**父親 (father)** </span>: 每個禮拜做一次差異備份 (Differential Backups),每個備份會被保存一個月
- <span style="background-color: #FFF887">**兒子 (son)**</span> : 每天做一次增量備份 (Incremental Backup),每個備份會被保存一週

>[圖片來源](https://www.ubackup.com/articles/grandfather-father-son-backup-5740.html)
:::success
GFS 原則中的**備份頻率**以及**保存的時間**都是可以根據不同的情況和需求去做調整,關係到 Cost( 成本 )、RPO 以及 RTO 。
> RPO、RTO 將在接下來會介紹到
:::
> 參考資料來源 :
> - [What Is Grandfather Father Son Backup?](https://www.ubackup.com/articles/grandfather-father-son-backup-5740.html)
## 備份的管理
### 儲存媒體的技術
- 儲存媒體的技術也是備份時須考量的其中一項因素之一
- 依據不同的儲存媒體的**可存取性 (Accessibility)** 與**存取速度**,分為以下三種儲存的技術 :
- Online
- 在線式儲存
- 可馬上、快速存取的資料儲存類型
- 常可用於需快速讀寫頻繁的工作
- 例 : HDD 可被視為 Online storage ( 在線式儲存 ),因為此 HDD 已連接、打開並正在旋轉,可以立即存取其中的檔案。
- Nearline
- 近線式儲存
- 介於 online 與 offline 之間
- 當前無法馬上存取,但之後可輕鬆存取的資料儲存類型
- 因此當請求存取資料時,速度會比 Online 慢一點
- 例 : MAID ( 大量空閒磁碟陣列 ) 被視為是 Nearline storage ( 近線式儲存 )。
:::info
### MAID
- 就像是一座塔裡面有很多硬碟,如果要取資料就會從塔中抽取硬碟資料,硬碟是很多的碟片組成
- 如果偵測到碟片沒有被讀取就會停止動作,可以節省能源
- 這個特性很適合作為備份使用,不需要頻繁存取,只有在備份或回復的時候才會去做讀寫
:::
- Offline
- 離線式儲存
- 不可以馬上存取、存取速度慢的資料儲存類型
- 舊型的儲存方式
- 例 : 需要手動定位和加載的異地儲存硬碟則被歸類為 Offline storage ( 離線式儲存 )。
>在這種情況下,需花費較大的力氣去存取這些檔案。
#### Online & Nearline & Offline 比較
| | Online | Nearline | Offline |
| -------- | -------- | -------- | ------- |
| 存取速度 | 快😊 | 中間 | 慢 ☹ |
| 價錢 | 貴 ☹ | 中 | 便宜😊 |
| 壽命 | 短 ☹ | 中 | 長 😊 |
>參考資料 :
>- [Backup Media](https://ithelp.ithome.com.tw/articles/10193986)
>- [nearline storage](https://www.techtarget.com/searchstorage/definition/near-line-storage)
>- [Different Types Of Data Storage | Advantages And Disadvantages Of Online Nearline And Offline Storage And Backup](http://www.bench3.net/2010/03/different-types-of-data-storage.html)
> - [MAID](https://www.hitachi.com/rd/glossary/m/maid.html)
<!-- ### Off-site data protection -->
### 資料儲存方式
接下來要介紹三種不同的資料儲存方式 :
1. DAS (Direct Attached Storage)
2. NAS (Network Attached Storage)
3. SAN (Storage Area Network)
#### DAS (Direct Attached Storage)

> [圖片來源](https://community.fs.com/blog/what-is-data-center-storage.html)
- 直接連接式儲存
- 是一種直接將儲存設備與 Hosts(Server/PC) 有線的連接儲存方式
> 通常是一個硬碟,直接插在電腦、伺服器或儲存裝置上,並且只能由這些設備直接存取。
- 多種介面可將儲存設備與 Hosts 連接
>例 : IDE、SCSI、SATA 等
:::info
以下是三種不同的硬體介面標準,負責硬體與電腦之間的資料傳輸
### SCSI(Small Computer System Interface, 小型電腦系統介面 )
- 一開始的設計就是為了規範電腦系統與各種周邊裝置之間的連結而產生,用途比 IDE/ATA 要來得廣
- 可連接的裝置有硬碟、磁帶機、掃描器、CD、DVD、印表機
### IDE (Integrated Drive Electronics)
- 常將 IDE 稱之為 ATA 介面
- IDE 指的是硬碟驅動的技術規格,而 ATA 則為硬碟與電腦連接的介面規格
- ATA : 後又改名為 PATA(Parallel ATA)
> 但我們還是常使用 ATA 這個詞
- 常用來做為 Floppy、硬碟與光碟機的連接介面
- 便宜
- 速度慢
- 不支援熱插拔
### SATA(Serial Advanced Technology Attachment)
- **S**erial **ATA**
- 傳輸速率更快
- 電腦匯流排,主要用於電腦主機板上連接硬碟、光碟機
- 支援熱插拔,指可以在電腦運作時插上或拔除硬體。
> 參考資料來源 :
> - [近代磁碟介面發展 (SCSI、IDE 與 ATA)](https://isite.tw/2020/01/30/19883/3#%E9%AB%98%E9%9A%8E%E7%B3%BB%E7%B5%B1%E7%9A%84%E4%B8%BB%E6%B5%81%E7%A3%81%E7%A2%9F%E4%BB%8B%E9%9D%A2%EF%BC%8DSCSI)
:::
- 優點
- 部屬、設置簡單 : 直接將儲存設備以有線連接至主機即可,不需要有網路部屬或硬體資源等等的設定
- 低維護
- 傳輸速度快、不受網路限制
- 相對便宜
- 缺點
- 有地區性的限制 : 擴展的設備一定要連接主機,無法進行遠程存取
- 資料無法共享 : DAS 的資料只能被直接連接的那台主機所存取
#### NAS (Network Attached Storage)

> [圖片來源](https://www.techtarget.com/searchstorage/definition/network-attached-storage)
- 網路式儲存裝置
- NAS 是一種專門用於提供網路儲存的儲存裝置
> 透過**網路連結的方式來提供資料**給 Server/Client 存取與使用
- NAS 通常是透過乙太網路 (Ethernet)、 Wifi 連上區域網路 (LAN)
:::info
### LAN (Local Area Network, 區域網路 )
- 連接住宅、學校或辦公大樓有限區域內電腦的網路
- Ethernet( 乙太網路 )、 Wifi 為 LAN 中最常使用的技術
:::
- NAS 溝通需透過特定網路協定
- ex: TCP/IP、NFS、CIFS/SMB
:::info
### NFS、CIFS/SMB
#### NFS(Network FileSystem):
- 一種分散式的檔案系統
- 目的是在網路上的 servers 之間都可透過網路的方式來共享檔案
##### CIFS/SMB(Common Internet File System/Server Message Block)
- 是一個位於應用層的網路檔案系統協定
- 目的是為了在網路上的機器之間可透過網路的方式來共享檔案
:::
- 優點 :
- 提升整體效能 : 由 NAS 負責 file server 的身分,其他 servers 可以發揮正常處理的效率
> 其他伺服器便不須同時兼負資料存取的動作,而有更大空間去進行其他的工作
- 與 DAS 相比,提升資料可存取性 : 用戶們可透過網路連結簡單地存取檔案,有助於多人協作的情況
- 缺點 :
- 傳輸穩定性會受到網路流量控制
- 安全性 : 因可以透過網路存取,可能成為駭客或惡意軟體的目標
#### SAN (Storage Area Network)

> [圖片來源](https://www.enterprisestorageforum.com/networking/san-storage-area-network/)
- 儲存區域網路
- SAN 是一個整個儲存網路
- 使用專屬的光纖 / 高速網路連接多個伺服器和儲存設備
- 溝通的協定 : FC( 光纖通道 ) 、iSCSI
- 提供共用的儲存集區,透過網路連結的方式可共享資料給多部 Server/Client 存取與使用
- 優點 :
- 傳輸速度快
- 與 DAS 相比,提升資料可存取性
- 可擴展性、適用於大型資料資料庫
- 需要增加儲存空間時,允許配置多個儲存設備
- 高可用性
- 由於 SAN 是一個儲存區域的網路,其中一條路徑的中斷並不會導致儲存設備與主機之間的連結失敗,可透過其他路徑存取至 SAN 中的儲存設備。
>技術名詞 : Mutipass
- 可配置多個儲存設備,將備份保存在不同台儲存設備上,可實現備援機制
:::info
高可用性是指系統或服務在遇到故障或異常情況時仍能保持可用性的能力。
:::
- 較安全
>因為儲存區域與外界區隔開來
- 缺點 :
- 成本較高
>需要購買光纖、路由器、HBA 等等的設備
- 建置複雜度較高、耗時
:::info
### 補充: 光纖 (Optical fiber)
- 是一種由**玻璃**或塑膠製成的纖維,利用光在這些纖維中以**全反射原理 (Total Internal Reflection, TIR)** 傳輸的光傳導工具
- 利用光的特性:
- 速度快
>頻率x波長=光速 : $3*10^{8}$m/s
- 全反射原理 : 理論上不會漏掉 (loss) 任何一個訊號

> 但光也會造成訊號耗損 : 散射、紅外線與紫外線吸收
> 不過光在光纖中的傳輸損失比電在電線傳導的損耗低
- 例如 : 海底電纜、內視鏡、電視等
- 具有傳輸速度快、距離遠、信號穩定等優點
- 常用於長距離、高速率的資料傳輸和通訊領域
- 常見類型 :

1. 多模光纖(Multimode Fiber,MMF):
- 光纖纖芯 (core) 直徑比較大,可容納不同的傳輸模式(多條光束)。
>光纖纖芯 (core) 直徑約 50-100um
- 常用於較短距離的高速傳輸
- 例如: LAN(區域網路)、SAN(儲存區域網路) 。
2. 單模光纖(Single-mode Fiber,SMF):
- 光纖纖芯 (core) 直徑比較小,只能容納一種的傳輸模式。
>光纖纖芯 (core) 直徑約 8-10um
- 傳輸距離比較遠,可以達到數十公里或數百公里,常用於長距離的通訊
- 例如 : WAN(廣域網路)、光纖通訊。
3. 填充式光纖(Plastic Optical Fiber,POF):
- 一種使用塑膠作為芯材的光纖
- 通常用於短距離的傳輸
- 例如: 在家庭網路和汽車網路中應用。
- 填充式光纖的成本比較低,但傳輸距離較短,速率也比較低。
:::success
選擇合適的光纖類型對於確保系統的性能和可靠性非常重要
:::
### iSCSI (Internet Small Computer System Interface)
> 發音為 /ˈаɪskʌzi/
- Internet **SCSI**
- 是一個 Transport layer protocol
- 電腦之間可利用網路 IP 來傳遞 SCSI 指令 :
- 藉由 iSCSI 協定將 SCSI 命令打包放置到要傳送的封包,因此當送達目的地端時,解讀封包後,遠端主機會將此儲存設備視為本地連接的 SCSI 儲存設備
- 常用的 port number : 860 、 3260
### HBA (host bus adapter)
- 主機控制器( 主機配接器 / 主機匯流排配接器 )是以電腦為主機系統,連接其他網路或儲存裝置的電腦硬體。
- 該術語主要指連接 SCSI、SAS 或 FC( 光纖通道 ) 裝置的擴充卡。

:::
#### DAS、NAS、SAN 比較

> [圖片來源](https://www.mycloudwiki.com/cloud/fundamentals/storage-basics/7/)
| | DAS | NAS | SAN |
| ------------ | ---- | --- | ---- |
| 傳輸速度 | 快😊 | 慢☹ | 快😊 |
| 建置難易度 | 簡單 😊| 中 | 難 ☹ |
| 資料是否共享 | 否 ❌ | 是(同個 LAN 下的主機) ✅ | 是(有連結到FC Switch 的主機) ✅ |
| 價格 | 便宜 😊 | 中 | 貴 ☹ |
總體而言 :
- DAS 適合小規模區域,價格相對較低,只能由單一設備存取。
- NAS 適合需要網路分享儲存的中小型企業和家庭用戶,並且支援多種儲存協定和管理功能。
- SAN 適合大型企業或者需要**高可用性**和**備援機制**的場景,能提供高速儲存和多伺服器同時存取的功能。
> 參考資料來源 :
> - [SAN vs. NAS vs. DAS Storage: Which One You Choose](https://www.techjockey.com/blog/san-vs-nas-vs-das#SAN_vs_NAS_vs_DAS_Storage_Whats_the_Difference)
>- [What is the difference between SAN, NAS and DAS](https://serverfault.com/questions/81723/what-is-the-difference-between-san-nas-and-das)
>- [DAS/NAS/SAN](https://sites.google.com/site/s9728004/wang-lu-guan-nian/das-nas-san)
>- [Storage Types (DAS, NAS & SAN)](https://networkwalks.com/storage-types-das-nas-san/)
> - [SATA](https://en.wikipedia.org/wiki/SATA)
> - [NFS vs CIFS – What’s the Difference (Pros and Cons)](https://cloudinfrastructureservices.co.uk/nfs-vs-cifs/)
> - [Storage Basics and Fundamentals](https://www.mycloudwiki.com/cloud/fundamentals/storage-basics/7/)
> - [SCSI (Small Computer System Interface)](https://www.techtarget.com/searchstorage/definition/SCSI)
> - [iSCSI (Internet Small Computer System Interface)](https://www.techtarget.com/searchstorage/definition/iSCSI)
> - [host bus adapter (HBA)](https://www.techtarget.com/searchstorage/definition/host-bus-adapter)
> - [光導纖維](https://zh.wikipedia.org/wiki/%E5%85%89%E5%B0%8E%E7%BA%96%E7%B6%AD#%E7%A8%AE%E9%A1%9E)
> [光纖](https://dop.nycu.edu.tw/ch/field_ii.html?aID=11)
### 關鍵指標 RTO & RPO
- 前提
- 公司日常的運作都非常仰賴這些伺服器的ERP相關的系統,而服務斷線即代表公司核心業務無法正常執行,而每分每秒都是成本的耗損😥
- 管理者最大的盲點「只要有備份就好」:point_right:容易讓公司的備份沒有實質的意義
>對於多久備份一次、還原時間點目標、資料恢復時間目標等等重要的目標都疏於規劃
- 以**管理層的角度**談到備份規劃時,需要從以下兩個指標看起 : RTO & RPO
- 備份對於公司最大的目標 :point_right: 極小化對公司與使用者功能所帶來的衝擊

> [ 圖片來源 ](https://www.creative-n.com/blog/what-is-backup-rto-and-rpo/)
#### RTO ( Recovery Time Objective ),復原時間目標
- 代表企業最多能夠承受服務中斷多久的時間
>今天公司的服務斷線的時候,要花多少的時間能夠讓公司的服務重新上線
- 目標是為了要確定災害人禍發生時,系統需要花多少時間復原資料
- 而公司該怎麼評估?
- 重點取決於**公司能忍受多久**
>當中除了員工抱怨之外,所帶來的商業損失 ( 因斷線導致客戶與你的交易沒辦法完成)、員工上班的系統沒辦法使用 ( 人事成本平白的消耗 ),這些都是可以量化的成本項目
- 成本量化:point_right: 分析 : 分析多少的損失是公司今天可以忍受的,公司又願意投入多少的成本去把風險控制在可以忍受的範圍,而此就是規劃的重點
- ex:
- 電商服務平台很重要,隨時都要服務客戶,因此 RTO 設定為 1 小時
- 文章分享平台,沒有立即需要服務的需求,因此 RTO 可以較寬鬆,設定為 1 天
#### RPO ( Recovery Point Objective ),復原點目標
- 代表可以接受的損失多久的資料量
>今天當公司的系統資料損壞後,透過還原機制可以還原到多久以前的資料?
- 目標是提前確保資料恢復和備份功能到位,以最大限度地減少事件期間可能丟失的資料量
- 依據不同的產業、型態,需求與目標都不同 :
- ex : 研發密集的產業、線上電商等等 :point_right: 隨時都會有資料的串流,因此每一筆資料都非常重要,對於資料損失的容忍度一定是非常低的
- ex: 每五分鐘做一次增量備份 :point_right: RPO = 5 min
:::success
先訂出 RTO、RPO 分析公司能承擔的對應風險,才能評估要花多少資源投資,在成本與效益之間取得平衡,發揮備份的實質意義
:::
> 參考資料來源 :
> - [有備無患:企業永續運作計畫 (BCP) 很重要](https://ithelp.ithome.com.tw/articles/10193986)
> - [recovery time objective (RTO)](https://www.techtarget.com/whatis/definition/recovery-time-objective-RTO)
> - [DEFINITION disaster recovery plan (DRP)](https://www.techtarget.com/searchdisasterrecovery/definition/disaster-recovery-plan)
### 資料庫的備份方式
依據資料庫的備份方式,可將其分為 hot backup ( 熱備份 )、 warm backup ( 溫備份 ) 和 cold backup ( 冷備份 ) 三大類 :
#### hot backup ( 熱備份 )
- online(dymamic) backup
- 資料庫在線備份時,允許用戶們進行的存取
- 大部分資料庫選擇的備份方式
- 若資料在備份的過程中被修改,生成的備份可能與最終資料狀態不同
- 因用戶存取不斷,容易影響資料庫整體性能
- 適用於服務不可隨意被中斷的情況
> 有需求要一直維持服務
<!-- > 代表選用這種備份方式代表服務是不可被隨意終止的,有需求要一直維持服務,資料才不會出事 -->
#### warm backup ( 溫備份 )
- 備份資料庫已安裝成與當前使用的資料庫相同 ( 或相似 ) 的資料庫和網路執行環境
- 資料庫已開機但未開始任何操作或者,或不時打開來備份更新的資料。
#### cold backup ( 冷備份 )
- offline backup
- 資料庫處於停機與不允許存取的備份
- 避免資料在備份的過程中被修改或覆蓋
- 不適用於需要不斷提供服務的系統
> 參考資料 :
> - [Hot Backup vs Cold Backup Differences & Best Hot Backup Practice [MiniTool Tips]](https://www.minitool.com/backup-tips/hot-backup-vs-cold-backup.html)
> - [Pros and Cons of Cold Backup and Hot Backup. Comparison](https://storware.eu/blog/pros-and-cons-of-cold-backup-and-hot-backup-comparison/)
> - [DEFINITION
cold backup (offline backup)](https://www.techtarget.com/searchdatabackup/definition/cold-backup)
> - [DEFINITION
hot backup (dynamic backup)](https://www.techtarget.com/searchdatabackup/definition/hot-backup)
## disaster recovery site(DR site) 災害復原站
- disaster + recovery = 災害 + 復原 ( 服務 )
- 代表在**災害** 發生時,是一個能夠將 data center ( 資料中心 ) 的資料即時恢復,並且復原 IT 設備服務的操作手法與架構
- 分為以下三種 :
- hot site
- 擁有與主站點同樣完整的服務
- 資料庫與主站同步,且服務一直都在
- 當災害發生時,可直接支援主站點的服務
- 該站點配備了所有必要的硬碟、軟體以及網路連接
- 最貴
- warm site
- 介於 hot site 與 cold site 之間
- 資料庫與主站同步,但服務是沒有上線的
- 災害復原速度慢於 hot site : 主機需要重新啟動需要時間
- cold site
- 平常是關機狀態沒有運作,有問題才啟動。
> 停機時間 : RPO + RTO 的最大值 + 服務啟動的時間
- 定期的資料會備份過去
> ex: 可能一個月備份一次完整備份過去,一個禮拜備份一次差異備份,一天備份一次增量備份
- 災害復原速度最慢 : 當真的發生災害時,才開始進行軟體或硬體設備的安裝,使用備份檔進行復原,因此復原時間需要較長的時間
- 最便宜
#### hot site V.S. warm site V.S. cold site
| | hot site | warm site | cold site |
| ------------ | -------- | --------- | ---------- |
| 設備完整度 | 最高👍 | 中間 | 最低 👎 |
| 復原速度 | 快 😊 | 中 | 慢 ☹ |
| 資料完整度 | 高😊 | 高 😊 | 低 ☹ |
| RPO | 小 | 小 | 大 |
| RTO | 小 | 中 | 大 |
| 成本 (Cost) | 高 ☹ | 中 | 低 😊 |
> 參考資料來源 :
> - [disaster recovery site (DR site)](https://www.techtarget.com/searchdisasterrecovery/definition/warm-site)
> - [What's the difference between a hot site and cold site for DR?](https://www.techtarget.com/searchdisasterrecovery/answer/Whats-the-difference-between-a-hot-site-and-cold-site-for-disaster-recovery)
## 磁碟陣列 : RAID
- 磁碟陣列 , Redundant Array of Independent Disks
>又稱 Redundant Array of **Inexpensive** Disks
>因為以前 disk 不便宜 , 而此項技術需要使用多顆 disks,因此曾被戲稱 **Inexpensive** Disks
### 由來
- 問題 :
- 單顆磁碟的空間容量小
- 單顆的磁碟讀寫速度也不夠快
- 若此單顆磁碟壞了就真的完蛋了
- 在 80 年代發明了此項虛擬化技術來解決
- 透過將多顆磁碟組合起來變成一個儲存裝置使用
- 而此儲存裝置有幾個特殊名詞叫做 **Virtual disk** ( 虛擬磁碟 )、**Logical disk** ( 邏輯磁碟 )
>原因是因為作業系統 (OS) 只會將此多顆磁碟組合視為一個磁碟而已
>對應到的 **Physical disk**
- 透過此技術來 :
- 資料方便存取
>因已經整合成一台高容量的『虛擬儲存空間』使用,不必在各硬碟間來回切換。
- 容量增加
- 提升讀寫性能
- 容錯、可靠性提升
### 分類
而 RAID 依照不同的使用需求又有許多分類,將會介紹 RAID 0 ~ RAID 6 各種類型的詳細介紹 :
:::info
- 表達儲存空間方式 :
- 1 台磁碟 容量 + 1 台磁碟 容量.... = 總共實際可儲存空間
> 總共實際可儲存空間 : 不包含備份、校正碼等等
:::
#### RAID 0
- 特性
- 至少由 2 台磁碟組成
- 資料以 **Round Robin striping** 的方式進行資料儲存
:::info
### Round Robin striping
- Round Robin : 以循環的方式
- Striping : 將一筆資料進行**分段**,成為若干個單位,每個單位**依序存入**多台 磁碟
disk~1~ $\to$ disk~2~ $\to$ disk~3~ $\to$ disk~4 $\xrightarrow{用完再回到第一個做儲存}$ disk~1~ ...
:::
- 資料**沒有備份**
- 容量 :point_right: N 台磁碟
> N : 硬碟總數
- ex: 1TB + 1TB = 2TB

- 優點
- 速度快 : 資料分散在不同硬碟,這樣可以同時找,讓讀寫頭一次直接讀取最上層,一次可以讀取 n 倍的資料量,速度增快許多

> 原本一台 SATA Disk :point_right: 讀取速度 100~133 MB/s
> 四台 SATA Disks :point_right: 讀取速度 400~532 MB/s
- 缺點:
- 無容錯性 :
- 沒有任何備份,若資料毀損或遺失就無法復原了
- 無錯誤檢查碼,若資料毀損或遺失時,無法依據檢查碼復原資料
#### RAID 1
- 特性
- 又稱為 Mirror disk
- 把一台 disk 上的資料完整複製一份至另外一台 disk 上
- 至少會有 2 台 disks 所組成
>But: 實際儲存量只有 1/2 台 disks
>因為剩下 1/2 台 disks 需要作為備份所使用
- 寫入時,會同時儲存與備份
- 讀取時,資料 & 備份都可以讀
- 儲存空間 :point_right: N/2 台
- ex: 1TB + 1TB = 1TB
> 因為其中一台是備份的

- 優點
- 復原十分容易
- 容錯 : 一台儲存資料與另一台備份的磁碟,允許其中一顆磁碟壞掉
- 比起單顆磁碟,增加讀取速度 : 因為兩台資料都相同,可透過 random read ,一台正在讀取資料,另外一台可以讀取下一筆資料
> ex: 左邊讀 A~1~ ,右邊可以先讀 A~2~
- 缺點
- 占用儲存空間大
- 成本較高 : 占用儲存空間大,須不斷提升儲存空間,購買新的硬碟
- 易與 mirror 版混淆 : 若磁碟只有其中一個 bit(or block) 壞掉了,會不知道哪一個才是原來的版本
<!-- - 與 RAID 0 相比,寫入效能較差 : 寫入需同時儲存與備份 -->
<!-- > 2、3、4 主要是去做 Error correction
> 解決 RAID 1 data redudency 的問題
> 知道哪一個壞,且能修正他 -->
<!-- > FIXME:可以比較整體寫入量 -->
#### RAID 2
- 特性
- RAID 0 改良版本
- **Bit-level** striping
- 在資料中加入 **ECC ( Error Correction Code, 錯誤修正碼 )**
- 大部分的 RAID2 使用 **Hamming code ( 漢明碼 )** 進行錯誤更正
- 全部的磁碟中,會分為兩種 : 專門放置資料的磁碟 + 專門放置 ECC 的磁碟 :
- 會依據 Hamming code 演算法來分配,根據硬碟數量選擇版本 ${2^d-1}$ = N
>N: 總磁碟數量
>d: 專門放置資料的磁碟數量
- ex: N = 3、7、15、31、63.....
- 寫入資料時,先算出 data 的 ECC ,再將 data 以 bit 切割 寫入磁碟 並同時也將 ECC 寫入磁碟
- 讀取資料,同時也會讀取 Hamming code,檢查資料是否正確
- 儲存空間 :point_right: N - K 台磁碟
> N : 總磁碟數量
> K : 用來儲存 Hamming code 的磁碟數量
- 1TB *7 = 4TB

> [圖片來源](https://en.wikipedia.org/wiki/Standard_RAID_levels)
- 優點
- 具有偵錯修復能力 : 加入錯誤更正碼 (ECC)
- 缺點
- 使用空間效率依然差 : 占用儲存空間依然大
> 佔用儲存空間 / 總共儲存空間
> 3 台/7 台 = 75%
<!-- > FIXME: 效能的比較放到後面 -->
:::info
### 錯誤校正碼 (ECC,Error correction code)
- 特性 :
- 用來**錯誤偵測**和**修正**的工具
- 例 : **Hamming code (漢明碼)** : 簡單高效率的錯誤更正碼
> 一定範圍以下的錯誤可以快速修正及復原資料
### Hamming code (漢明碼)
- 1950年,由美國數學家理 Richard Wesley Hamming 發明
- 是在電信領域的一種線性偵錯碼,在傳輸的訊息流中插入驗證碼 (Parity) ,以偵測並更正位元錯誤
- Hamming code 要多長?
:point_right:公式:${2^k}$ ≥ d+k+1
> d: data 長度
>k: Hamming code 長度
- ex : 當 d = 4
:arrow_right: ${2^k}$ ≥ 4+k+1
:arrow_right: k ≥ 3
- data 長度 = 4
- Hamming code 長度 = 3 (需要幾個驗證碼 /Parity )
- 因此 data + Hamming code 長度 = 7
- 驗證碼( Parity ) 以 ${2^n}$ 的位置依序放入到 data 裡面
- 然後將 3 個 Parity 依序以 ${2^0}$ 、${2^1}$、${2^2}$ 的位置插入 data 中
:point_right: [7,4] hamming code = P~1~, P~2~, D~1~, P~3~, D~2~, D~3~, D~4~
<!-- > hamming code 也是把所有的1加起來
> 然後差在2的次方的位置
> 所以一個1G的資料過來
> 切成好幾個分段
> 一邊算parity 一邊數數
> 他的parity bit都會是之前的 data 加上 parity bit
>
> 全部一共加起來再算出來的
> 1G下來的話就真的是
> 左邊一個bit 右邊一個bit 進兩顆硬碟 然後 parity bit 到第三顆硬碟
> 因此他使用空間效率非常差
> 資料近來也是算PARITY
> 最少兩台 -->
> 參考資料來源 :
> - [Hamming Code 漢明碼](https://yaojordan.medium.com/%E8%A8%88%E6%A6%82-hamming-code-%E6%BC%A2%E6%98%8E%E7%A2%BC-78102d680c78)
:::
<!-- - 其實每一台磁碟的每一個sector都會有 error detection code 至少都知道誰壞掉
- 所以根本不用另外再做一個 detection ,只需要做recovery 就好
- Disk controller can detect whether a sector has been read correctly
- a single parity bit is enough to correct error from a single disk failure -->
#### RAID 3
- 特性
- 採用 **Bit-interleaving** (資料交錯儲存) 技術
- 以 **byte** 為單位切割資料,分散儲存在多台磁碟上,最後一台負責存入 **Parity 值**
- 寫入新的資料時,會重新計算 Parity 值
- 平時正常讀取時,不會查看 Parity
- 會在定期硬碟資料檢測時,來查看 Parity, 查看資料是否有問題
- 至少會有 3 台磁碟所組成,其中 :
- 2 台可作為儲存資料所使用,1 台負責儲存 **Parity 值**
- 儲存空間 :point_right: N-1 台磁碟
- ex: 1TB * 3 = 2TB (可用部份)

- 優點
- 比起 RAID 2 ,占用儲存空間率下降 : 不管有多少台,只需使用一台磁碟存放 Parity 值
- 容錯 : 允許最多一台的磁碟遺失,透過 Parity 值和剩餘的資料來恢復磁碟上的遺失的資料
- 寫入速度比 RAID2 快 : Parity 運算簡單快速,ECC 需要較複雜的運算
- 缺點 :
- 存取資料大,影響存取速度 : 若一次須存取較大的資料時, 會花很多時間在尋找資料的片段
> Access time = Seek time + Latency time
> Seek time : head 移動到 需要被讀寫的 track 所花的時間資料存取中最耗時間的部分
>Latency time: 將 disk 需要被讀寫的資料 旋轉 到 head 下所花的時間
>因此 RAID 4 以 block 為單位分割資料,提升存取速度
- 單一 Parity 的磁碟,可能會造成 bottleneck (瓶頸) :
每次只能有一個人使用這台 Parity disk ,其他人要使用的話必須等待前一位完成才可以使用
:::info
### Parity
- 運算公式 : 如同於 XOR ,將同一排位元相加後,除以 2 取餘數
- 實際操作方式 : 若其中一台磁碟的資料有遺失,可透過其他台磁碟的值來還原資料
- 例如 :
- 三台 disks
| Disk 1 | Disk 2 | Disk 3 (Parity) |
| ------ | ------ | --------------- |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 0 | 0 | 0 |
| 1 | 1 | 0 |
- 四台 disks
| Disk 1 | Disk 2 | Disk 3 | Disk 4(Parity) |
| ------ | ------ | --- | ------ |
| 1 | 0 | 0 | 1 |
| 0 | 1 | 1 | 0 |
| 0 | 0 | 1 | 1 |
| 1 | 1 | 0 | 0 |
:::
#### RAID 4
- 特性
- 採用 **Block interleaving** ( 塊交織 ) 技術
- 至少由 3 台 Disk 所組成
- 以 **block** 為單位切割資料,分散儲存在多台 disks 上
- 儲存空間 :point_right: N-1 台磁碟
- ex : 1TB * 3 = 2TB ( 可用部分 )

> [圖片來源](https://blog.router-switch.com/2018/01/a-guide-for-storage-newbies-raid-levels-explained/)
- 優點 :
- 相較於 RAID 3 , 存取速度較快
- 缺點 :
- 單一 Parity 的磁碟,可能會造成 bottleneck (瓶頸) :
每次只能有一個人使用這台 Parity disk ,其他人要使用的話必須等待前一位完成才可以使用
#### RAID 5
- 特性
- 採用 **Disk Striping** (硬碟分割) 技術
- Parity 為 block level
- Parity 值平均分散存在不同的磁碟
- 至少由三台磁碟組成
- 儲存空間:point_right: N-1 台磁碟
- ex: 1TB * 3 = 2TB ( 可用部分 )

> P : Parity 值
> A1、 A2、B2 可以同時讀取
- 優點
- 比起 RAID 3、RAID 4 ,讀寫速度較快 :
- 原本RAID 3、4 對於使用者所可以讀寫的頻寬只有 N-1 個
- 因此RAID 5 將 parity 散開來 :point_right: N 顆硬碟可以有效的使用到,頻寬 = N 個
- IO 的 request 可以平均的分配在所有硬碟上
- 缺點
- 相較於 RAID 3、4,實現起來較複雜
#### RAID 6
- 特性
- 與 RAID 5 相似,差別在磁碟之間 會儲存兩種不同運算的 Parity 值
- 至少會有 4 台磁碟所組成
- 兩種演算法的 Parity 值平均分散存在不同的磁碟
- 儲存空間 :point_right: N-2 台磁碟
> N: 總磁碟數量
- ex: 1TB * 4 = 2TB ( 可用部分 )

- 優點
- 容錯性提升 : 新增一種 Parity 演算法
- 缺點
- 相較於 RAID 5
- 占用儲存空間多一台磁碟
- 讀寫速度較慢 : 因為讀寫時需再多計算以及存取一種 Parity 值
| | RAID 0 | RAID 1 | RAID 2 | RAID 3 | RAID 4 | RAID 5 | RAID 6 |
|:------------------------------------ | ------ | --------------- | -------- | --------- | -------- | -------- | --------- |
| 至少需要硬碟數量 | 2 台 | 2 ( 需偶數 ) 台 | 3 台 | 3 台 | 3 台 | 3 台 | 4 台 |
| 儲存空間 | N 台 | N/2 台 | N-K 台 | N-1 台 | N-1 台 | N-1 台 | N-2 台 |
| 最大容錯數 | 0 台 | N/2 台 | K | 1 台 | 1 台 | 1 台 | 2 台 |
> N: 代表硬碟總數
> K : 需要用來儲存 hamming code 的磁碟數量
- 提到效能的話,若以兩個面向來看 : 寫入資料量 & 運算複雜度
- 寫入資料量 : 若依據 **所有硬碟的總寫入資料量** 與**原始檔案大小** 的比值來看的話
:point_right:RAID 1 > RAID 2 > RAID 6 > RAID 3 = RAID 4 = RAID 5 > RAID 0
- ex: 所有硬碟的總寫入資料量 / 原始檔案大小
- RAID 0 = 1G/1G = 100%
- RAID 1 = 2G/1G = 200%
>數值越大,代表需占用的儲存空間越大
- 運算複雜度 : 若綜合花費最多的時間成本 & 空間成本來看的話
:point_right: RAID 0 > RAID1 > RAID 5 > RAID 6 > RAID 4 > RAID 3 > RAID 2
#### Hybrid RAID
為了滿足更高的性能或更好的可靠性等要求,結合以上不同的 RAID 的方式,延伸出以下常見的組合模式 :
##### RAID 10 (RAID 1+0)

> [圖片來源](https://zh.wikipedia.org/wiki/File:RAID_01.svg)
- 至少 4 台硬碟
- 儲存容量 :point_right:( 1TB + 1TB ) + ( 1TB + 1TB ) = 2TB
- 結合 RAID 1 與 RAID 0 :point_right: Mirroring + Striping : 先做鏡像 (Mirroring),再做分割 (Striping) 資料
##### RAID 50 (RAID 5+0)

> [圖片來源](https://i.imgur.com/8uXuWkL.png)
- 至少 6 台硬碟
- 儲存容量 :point_right: ( 1TB * 3 ) + ( 1TB * 3 ) = 4 TB
- 結合 RAID 5 與 RAID 0 :point_right: 先做RAID5,再做 RAID 0
> 參考資料來源 :
> - [RAID 磁碟陣列是什麼?一篇文章就理解(2022 年最新)](https://www.linwei.com.tw/forum-detail/45/#RAID%E7%A3%81%E7%A2%9F%E9%99%A3%E5%88%97%E7%9A%84%E7%94%B1%E4%BE%86)
> - [RAID 4 vs. RAID 5](https://www.techtarget.com/searchstorage/answer/RAID-4-vs-RAID-5)
> - [Raid Levels and Types Explained: Advantages and Disadvantages](https://phoenixnap.com/kb/raid-levels-and-types)
> - [RAID 2, RAID 3, RAID 4 – What It Is, How It Works? The History Lesson
](https://www.open-e.com/blog/raid-2-raid-3-raid-4-what-it-is-how-it-works-the-history-lesson/)
> - [10510周志遠教授作業系統_ 第26C講 RAID](https://www.youtube.com/watch?v=TiyQuiVq0Zs&t=866s&ab_channel=NTHUOCW)
> - [Time & Space Complexity](https://jason-chen-1992.weebly.com/home/time-space-complexity)
## 備份的資料級別實作
* 資料層級上層到底層 :
- imformation
- file
- file system
- disk
- 越上層的資料越少 : 因為彙整過可能會漏掉細節,相對的不需要的資料也越少,備份出的檔案的 size 也會越小。
### information
:::info
### What is information、database
- information ( 資訊 ) 代表的是有經過「資料處理」的結果

>[圖片來源](http://www.csie.sju.edu.tw/cm/course/db/ch01.pdf)
- data processing ( 資料處理 ) :
- 將「資料」轉換成「資訊」的一連串處理過程
- 而這一連串的處理過程就是先輸入原始資料到「資料庫」中,再透過「程式」來處理
- database ( 資料庫 ) 是由一群相關資料的集合體。
- 資料以不重覆的方式來儲存許多有用的資訊
- 使用者可以方便及有效率的**管理需要的資訊**
:::
#### mysqldump
- 備份資料庫的工具
- 安裝
```shell=
sudo apt-get install mysql-server
```
:::success
## 實作
- 以 root 身分進入編輯
```
sudo mysql -u root
```
- 創建資料庫
```sql=
CREATE DATABASE NCNU;
USE NCNU ;
CREATE TABLE student (name VARCHAR(20),stuID INT(20));
INSERT INTO student VALUES('Shaila','108213050');
INSERT INTO student VALUES('Chi-hua','108213042');
CREATE TABLE teacher (name VARCHAR(20),tID INT(20));
INSERT INTO teacher VALUES('Teacher1','1');
INSERT INTO teacher VALUES('Teacher2','2');
```
- 建立使用者
```sql=
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
```
- 給予權限
```sql=
GRANT ALL PRIVILEGES ON NCNU.* TO "username"@"localhost";
```
更新權限
```sql=
FLUSH PRIVILEGES;
```
- 查看是否有新增成功
```sql=
-- 查看所有的資料庫
SHOW DATABASES;
-- 查看資料表
SELECT * FROM < 資料表名稱 > ;
```
- 退出編輯
```sql=
quit ;
```
- 備份單一資料庫
```shell=
mysqldump -u <username> -h localhost -p --databases < 要備份的資料庫 > > < 備份檔名稱 >.sql
```
- `-p` : 接密碼
- 查看 sql 檔
```shell=
ls -l *.sql
```
- 以 username 的身分登入
```sql=
mysql -u <username> -p
```
- 刪除資料庫
```sql=
DROP DATABASE < 資料庫名稱 >;
```
- 重建資料庫
```sql=
CREATE DATABASE < 資料庫名稱 >;
```
- 復原單一資料庫
```shell=
mysql -u <username> -p < 資料庫名稱 > < < 備份檔名稱 >.sql
```
> 參考資料來源 :
> - [How To Back-Up & Restore Databases via the Mysqldump Command](https://adamtheautomator.com/mysqldump-command/#Restoring_from_Backup)
> - [Unclear result of mysqldump](https://stackoverflow.com/questions/26191988/unclear-result-of-mysqldump)
:::
#### AutoMySQLBackup
> FIXME:autoMysqlBackup 工具,可以做完整備份
- 自動備份 Mysql 備份
- 安裝完之後,系統每天會執行一次 mysql 備份,檔案將儲存於
`/var/lib/automysqlbackup`
- 安裝
```shell=
sudo apt-get install automysqlbackup
```
<!-- 
 -->
- 執行 + 驗證運行是否正常
```shell=
sudo automysqlbackup
```
- 執行之後,去 `/var/lib/automysqlbackup` 檢查下備份的內容
```shell=
ls -R /var/lib/automysqlbackup/
```

- 設定檔位置 `/etc/default/automysqlbackup`
```shell=
/etc/default/automysqlbackup
```

> 參考資料來源
> [AutoMySQLBackup](https://github.com/sixhop/AutoMySQLBackup)
>[How to Back Up MySQL Databases with AutoMySQLBackup](https://serverpilot.io/docs/how-to-back-up-mysql-databases-with-automysqlbackup/)
### file
:::info
### What is file ?
file ( 檔案 ) 是電腦中用於儲存資料、設定、程式指令的物件
:::
#### hard link
<!-- 這個技術如何用在備份
用 hard link 來達成與備份相關的什麼 -->
##### 介紹
- 指向檔案本身 : 相同的 inode 指向相同的檔案
:::info
### inode :
- 一種資料結構,用於描述檔案系統物件(包括檔案、目錄、裝置檔案、socket、管道等),就像是檔案的身分證。
- 每個 Inode 儲存了檔案系統物件、資料的屬性和儲存於硬碟的位置。
- 少了Inode,就再也沒人知道某個檔案內容,其實還儲存在硬碟上。
:::
- 只能連結檔案,不能連結目錄
- 不能跨 Filesystem
- 若原本檔案被刪除,連結的檔案還存在
- 指令
```shell=
ln <filepath> <linkname>
```
:::info
## soft link
- 主要用於簡化路徑
- 指令
```shell=
ln -s <filepath> <linkname>
```
- 若原本檔案被刪除,指向的目標不存在,則此 link 等於沒有用了
:::
##### hard link 與備份的關係 ?
- 備份 : 雖屬於不同的硬碟位置也擁有不同的 inode,但其實硬碟位置中儲存的內容相同

- hard link : 指向相同的 inode ,此 inode 指向檔案硬碟中儲存位置

>[圖片來源](https://devconnected.com/understanding-hard-and-soft-links-on-linux/)
> FIXME:檔名怎麼存的(名字不重要) => 存在哪一個目錄
> - 名字(會存在directory)不重要,重要的是每一個檔案都會有 header,透過 header 我們可以知道這個檔案的性質

> - 一個 block = 512 bytes
> - 列出底下所有檔案 `ls -hR`
> - 判斷 file 是哪一種檔案 `file <file>`
- 即使刪掉原本的檔案了,但其實我們只有刪了檔名,實際的硬碟位置還在, hard link 還指向那個 inode ,讓系統上也仍然可以找得到那個檔案的硬碟儲存位置。
> 類似備份的想法,刪除原檔案之後至少還有備份的那份檔案存在
<!-- :::success
### 實作
- 先創建一個檔案

- 建立 `hard link` & `soft link`

- 刪除原始檔案

::: -->
> 參考資料來源:
> - [Understanding Hard and Soft Links on Linux](https://devconnected.com/understanding-hard-and-soft-links-on-linux/)
> - [Linux: Hard Links and Soft Links](https://medium.com/algorithm-solving/linux-hard-links-and-soft-links-9a15460aadc4)
#### rsync
- 可用來處理遠端檔案的備份與同步
- 採用增量備份
- 遠端備份指令 :
```shell=
rsync -avzh <本地端檔案> <遠端主機使用者名稱>@<目的地 IP>:<遠端備份的目錄位置>
```
- 預設 SSH 登入
- 常用參數 :
- `a` : 檔案存檔的模式,允許遞迴地複製檔案,同時保留了檔案的權限、鏈結、時間戳記等等訊息
- `r` : 遞迴地複製資料,但不保留檔案權限、時間戳記等等訊息
- `v` : 顯示傳輸詳細內容
- `z` : 檔案壓縮
>讓 rsync 可以自動將資料壓縮後再傳送,並在遠端接收到資料後自動解壓縮,減少網路傳輸的資料量
- `h` : 以看得懂的方式輸出格式
:::success
### 實作
- 本機使用者名稱 : `sheisheibaby`
- 另外一台主機使用者名稱 : `s108213050` ,另一台主機 IP 位置 :`10.0.0.127`
- 先創建一個檔案
> `Shaila.txt`
- 查看權限 :

- 更改權限
```shell=
sudo chown <擁有者名稱>:<群組名稱> <檔案名稱>
```

:::warning
要確定目標資料夾的 other 權限是可以寫入的
:::
- 傳送檔案
```shell=
rsync -avzh /home/sheisheibaby/Documents/Shaila.txt s108213050@10.0.0.127:/home/s108213050/Documents
```

- 遠端主機查看

:::
:::info
### scp vs rsync
主要的不同在於其複製檔案的方式。
- scp :
- 單純的將選擇的檔案或目錄完整複製後,透過 SSH 加密進行傳輸給指定的主機。
- rsync :
- 採用增量備份,因此第一次複製傳輸時,會進行完整的備份,但之後只要備份修改過的檔案或目錄即可。
:::
> 參考資料來源 :
> - [10 Practical Examples of Rsync Command in Linux](https://www.tecmint.com/rsync-local-remote-file-synchronization-commands/)
> - [Linux 使用 rsync 遠端檔案同步與備份工具教學與範例](https://blog.gtwang.org/linux/rsync-local-remote-file-synchronization-commands/)
> - [Hard Link與Symbolic Link的比較](https://claire-chang.com/2019/10/03/hard-link%e8%88%87symbolic-link%e7%9a%84%e6%af%94%e8%bc%83/#%E7%A1%AC%E9%80%A3%E7%B5%90%20(Hard%20Link))
> - [Copy files with SCP and Rsync](https://docs.rackspace.com/support/how-to/copy-files-with-scp-and-rsync/)
> - [How does `scp` differ from `rsync`?](https://stackoverflow.com/questions/20244585/how-does-scp-differ-from-rsync)
#### tar
- 支援完整、增量、差異備份
- 常用指令
- `f` : `--file=`,指定壓縮檔案的名稱
- `c` : `--create` ,壓縮檔案
- `x` : 解壓縮檔案
- `v` : 顯示詳細資訊
- `t` : 查詢
- `z` : 使用 gzip 壓縮或解壓縮 。
- `j` : 使用 bzip2 壓縮或解壓縮。
>壓縮後的副檔名為或 `.tar.bz2`
- `p` : 保留檔案的權限與屬性
- `g` : 建立快照檔 (Snapshot)
:::success
### 實作
#### 完整備份
- 建立資料夾 : `FullBackup`
```shell=
mkdir FullBackup
```
- 在資料夾內放置 3 個檔案 `a.txt` `b.txt` `c.txt`

- 建立完全備份
```shell=
tar -czvf <備份檔案命名>.tar.gz <需備份的目錄>
```

- 查看備份壓縮檔
```shell=
tar -tvf <備份檔名>.tar.gz
```

#### 增量備份
- 建立資料夾: `IncreBackup`,並將 `Fullbackup` 目錄底下的檔案複製過去
```shell=
mkdir IncreBackup
cp FullBackup/* IncreBackup/
```

- 先進行第一次完整備份,並且**建立快照檔 (Snapshot)**
> -g : 建立快照
```shell=
tar -czvg snapshot-file -f <備份檔案命名>.tar.gz <需備份的目錄>
```

- 檢查備份檔與快照是否有建立完成
```shell=
tar -tvf <備份檔名>.tar.gz
```
- 下一次備份只備份與上一次備份有差異的部分 :
- tar 只參考 **上次備份時更新的 snapshot_file** 的時間
- 只備份最後異動時間比 snapshot_file 新的檔案
- 進行創建、刪除、修改檔案
```shell=
rm file
touch file
vim file
```
> 刪除 a.txt、新增 d.txt 、 修改 b.txt


- 再進行一次備份與快照
```shell=
tar -czvg snapshot-file -f <備份檔案命名>.tar.gz <需備份的目錄>
```

- 復原檔案
- 先創建一個資料夾放置復原檔案 : `Restore`
```shell=
mkdir Restore
```

- 依序復原 : 先復原完整備份 ,再復原增量備份
```shell=
tar -xvf <備份檔案>.tar.gz -C <復原檔案目錄位置>
```

- 到 `Restore` 查看復原的狀況

> 參考資料來源 :
> - [How to Create and Restore Incremental Backups with Tar on Linux](https://snapshooter.com/learn/linux/incremental-tar)
> - [Create incremental backup in linux using tar](https://www.geeksforgeeks.org/create-incremental-backup-in-linux-using-tar/)
:::
#### Déjà Dup
- 介紹:
- Ubuntu 內建的備份軟體
- duplicity 的圖形化介面前端工具
- 主要是提供 **rsync** 的功能
- ex: 進行增量備份、加密、遠端備份等
- 搜尋 Backups 即可找到此工具

- 操作介面

> 參考資料來源 :
> - [How to Back Up Ubuntu the Easy Way with Déjà Dup](https://www.howtogeek.com/108869/how-to-back-up-ubuntu-the-easy-way-with-dj-dup/)
### file system
:::info
### What is file system
檔案系統 (file system) 主要管理電腦上磁碟的分割、位置分配等等,負責磁碟的內部一切操作
:::
#### dump
- 用於備份 file system 的工具
- 支援完整與增量備份
- 常用指令
- `- level`: 數字 0~9 ,代表備份的層級
> 0 = 完整備份,1~9 = 增量備份
- `u` : 備份後,記錄和更新 `/etc/dumpdates` 檔案中的備份
- `f` : 指定需要備份的檔案
- `W` : 可備份的檔案系統
:::success
### 實作
- 安裝 dump
```shell=
sudo apt install dump
```
- 查看檔案系統空間以及系統配置可用空間相關訊息
```shell=
df -h
```

- 查看可備份的檔案系統
```shell=
dump -W
```

#### 完整備份
- 進行完整備份
```shell=
sudo dump -0uf <備份檔案名稱> <需要備份的目錄>
```

- 查看是否有備份成功

- 查看備份內容
```shell=
restore -tf <備份的目錄名稱>
```

- 復原完整備份
```shell=
restore -xf <備份的目錄名稱>
```
#### 增量備份
- 進行增量備份
```shell=
sudo dump -1uf <備份到哪> <需要備份的目錄>
```
- 復原增量備份
```shell=
sudo restore -xf <備份的目錄名稱>
```
> 參考資料來源 :
> - [dump command in Linux with examples](https://www.geeksforgeeks.org/dump-command-in-linux-with-examples/)
:::
:::info
## 補充 : ZFS(Zettabyte File System)
- 特色
- 是一個具有強大的邏輯磁碟管理功能的檔案系統
- Ubuntu 在 16.04 LTS 的時候正式加入了 ZFS 的支援
- 支援磁碟陣列 (RAID)、檔案系統快照(snapshot)、大容量磁碟等特色
- 採 128 位元定址 = $2^{128}$ 定址數量 :arrow_right: 容量超大
### 基本概念

> [圖片來源](https://itsfoss.com/what-is-zfs/)
- VDEV :
- **V**irtual **DEV**ice
- 一個 VDEV 由多個 disks 所組成
- 分割資料級別 : 基本上是以 disk 為主
>也可以是 file 級別,但檔案大小至少要 128MB 以上
- RAID 的種類 :RAID 1、RAID 5(RAIDZ)或 RAID 6(RAIDZ2)、RAIDZ3
> RAIDZ3 : ZFS 特有的RAID方式
- 備援 (Spare) : 特殊的虛擬 vdev 型態可用來持續追蹤可用的熱備援裝置 (Hot spare)
> 當硬碟損壞而導致儲存集區降級時,Hot Spare 硬碟會自動替換故障硬碟,讓儲存集區可以進行修復並在更短的時間內恢復良好狀態
- 日誌 (log): ZIL(ZFS Intent Log),ZFS 紀錄的裝置
- 使用比主要儲存池還更快的儲存裝置,加速同步寫入動作 (Synchronous transaction)
- 因此當發生同步寫入時,資料寫入會先寫進 ZIL,之後再合併寫入至一般的硬碟
- 目的 : 提高效能、減少延遲
- Pool :
- 一個 Pool 由多個 VDEV 所組成
- 儲存設備所共用的儲存池,用來配置儲存空間
>就像游泳池一樣,把實體儲存設備都丟進去
- 儲存池的空間可被所有的檔案系統使用且透過加入新的儲存裝置來增加空間
- 儲存池會被拿來建立一個或多個 File System ( 檔案系統 ) 或區塊裝置 (磁碟區 Volume,ZVOL)
- dataset (資料集) : 是 ZFS 檔案系統、磁碟區、snapshot、clones、volume 的通用術語。
- 每一個資料集都有 **unique name**
- 採用像目錄一樣的層級來命名
- 子資料集會繼承父資料集的屬性
- 子資料集可以覆蓋預設繼承自父及祖父的屬性
ex: `rpool/USERDATA` ,USERDATA 是 rpool 的子資料集
- Copy-On-Write (COW/ 寫入時複製 ) :
- 多人共用一份檔案,若有一個人需要更改這份檔案時,系統才會複製一份copy 給這個人給他修改,其他人使用的還是原本未修改的檔案
>系統會另建一個新位址指向 copy 的檔案
- 好處 : 寫入中斷時,原本的資料並不會遺失,提高資料完整性
>例如 : 電腦當機、沒電
- Snapshot( 快照 ) :
- 是在 Point-in-Time (單一時間點 ) 下的檔案系統所拍攝的Read-Only ( 唯讀 ) 備份
- 僅記錄檔案系統中前一個版本與目前檔案系統的差異,可節省記憶體空間
- 使用了 Copy-On-Write 的技術
- 可以紀錄當下檔案系統的所有組成,快速的還原系統的狀態
- 可以恢復單一檔案的快照,而不用恢復整個系統
- Clone :
- clone 是指在 ZFS 中從原系統檔案複製出來的複製品,具備可讀寫的特性。
- 只能從 snapshot 建立 :
- 必須要先有一份 snapshot 才能建立clone
- 而那份snapshot在clone被刪掉前是無法刪除的。
- Compression ( 壓縮 ):
- 支援多種資料壓縮技術,可以減少資料佔用的儲存空間、I/O ,提高系統性能
- 預設可支援 包括 LZ4、GZIP、ZLE、LZJB 和 BZIP2
- 每個資料集都有壓縮 (Compression) 屬性
- Deduplication (dedup, 去重複 ) :
- 是一種資料壓縮技術,透過刪除儲存設備上相同的資料區塊,以節省儲存空間的使用。
- 去重複資料表 (Deduplication table, DDT):
- 透過這個表來偵測重複的資料區塊
- 這個資料表中會有唯一的校驗碼清單、資料區塊的所在位置以及參考數。
:point_right: 當寫入新資料時,便會計算校驗碼然後比對清單中是否有符合的既有資料區塊已在清單。

> [圖片來源](https://datafloq.com/read/zfs-file-system-linux-ubuntu-good/)
## 實作
### 配置&安裝
- 版本 : Ubuntu 20.04 LTS
- 可預先配置 ZFS


- bpool 是 boot pool,存放所有 boot 相關的目錄
- rpool 是 root pool ,將所有內容儲存在 `/(minus /boot)`
- 安裝 :
```shell=
sudo apt install zfsutils-linux
```
> 如果在初始設定的時候沒有預先配置 ZFS 可以透過指令來安裝
- 確認是否有安裝完成
```shell=
whereis zfs
# 位置
zfs: /usr/sbin/zfs /etc/zfs /usr/share/man/man8/zfs.8.gz
```
## zpool
- zpool 負責建立、刪除、管理儲存池
- 選擇自己分割
- 一個 `/` 根目錄
- 一個 swap
- 四個磁區
> RAID 6 至少要有四個


- 查看系統磁區配置狀態
```shell=
lsblk
```

### VDEV - RAID
- 建立 RAID 0
```shell=
zpool create <pool-name> <disk path> <disk path>...
```
- 建立 RAID 1 (Mirror) : 至少兩個
```shell=
zpool create <pool-name> mirror <disk path> <disk path>...
```
- 建立 RAID 5(RAIDZ) : 至少三個
```shell=
zpool create <pool-name> raidz <disk path> <disk path>...
```
- 建立 RAID 6(RAIDZ2) : 至少四個
```shell=
zpool create <pool-name> raidz2 <disk path> <disk path>...
```
- 查看 zpool 儲存集區狀態
```shell=
zpool status
```
- 顯示 ZFS 檔案系統資訊
```shell=
zpool list
```
> 須加上sudo
- 刪除 pool
```shell=
zpool destroy <pool-name>
```
### Deduplication ( dedup )
- 預設是 `not enabled`
```shell=
sudo zfs get dedup <pool-name>
```

- 改為 `enable`
```shell=
sudo zfs set dedup=on <pool-name>
```
- 查看是否有啟用 dedup : `sudo zfs get dedup <pool-name>`

> **子資料集會繼承父資料集的屬性** : 因此只要父資料集啟用 dedup,其所有子資料集也繼承其屬性
- 查看 deduplication ratio : 如果顯示為 `1.00x`,代表全部的資料都是獨特的 ( 沒有重複 )
- `zpool list`

- 測試 dedup
- 先下載好一張圖片

- 先查看 deduplication ratio : `sudo zpool list`
- 將圖片複製到 pool 下 ,複製兩次
```shell=
sudo cp index.jepg /pool/test/copyimg1.jepg
```
- 再查看一次 deduplication ratio

- 查看 去重複資料表 (Deduplication table, DDT)
```shell=
sudo zpool status -D pool-test
```

### Compression
- 支援 lz4、zle、gzip 壓縮格式
- 預設是 `not enabled`
- 查看這個 `<pool-name>` pool 是否已啟用 compression
```shell=
zfs get compression <pool-name>
```
- 改為 `enable`
```shell=
sudo zfs set compression=on <pool-name>
```

> **子資料集會繼承父資料集的屬性** : 因此只要父資料集啟用壓縮,其所有子資料集也繼承其屬性
- 在 `<pool/fs>` 上啟用壓縮並使用 `<algorithm>` 壓縮算法
```shell=
sudo zfs set compression=<algorithm> <pool/fs>
```
- 然後查看是否有啟用成功 : `zfs get compression <pool-name>`

## zfs
- zfs 工具負責建立、摧毀與管理在一個儲存池中所有的 ZFS 資料集。
- 創建新 dataset `pool-test/shaila` & 使用 LZ4 壓縮:
```
sudo zfs create -o compress=lz4 pool-test/shaila
```
### Snapshot
- 查看有哪些 datasets
```shell=
zfs list
```
- 新增檔案 : `shaila.txt`
- 新增 dataset `pool-test/shaila` 的 snapshot :
```shell=
sudo zfs snapshot <dataset path>@<snapshot 檔案名稱>
```
- 查看 snapshot 清單 :
```shell=
zfs list -t snapshot
```
- 修改 `shaila.txt`
- rollback :
```shell=
zfs rollback <dataset path>@<snapshot 檔案名稱>
```
- 查看是否復原
- `shaila.txt` 內容是否有回復到原本
- 移除 snapshot
```shell=
zfs destroy <dataset path>@<snapshot 檔案名稱>
```
<!-- #### mount snapshot
- 先去 ``
- mount snapshot
```shell=
mount -t zfs <pool-name>/@snapshot <mount point>
```
```shell=
umount
```
> FIXME:
`mount point` 新增一個volume 把東西掛載到哪裡
snapshot 要怎麼匯出
snapshot is read-only
關鍵字:mount snapshot -->
> 參考資料來源 :
> - [What is ZFS? Why are People Crazy About it?](https://itsfoss.com/what-is-zfs/)
> - [What is the purpose of an bpool partition in ZFS and what does it contain?](https://askubuntu.com/questions/1444113/what-is-the-purpose-of-an-bpool-partition-in-zfs-and-what-does-it-contain)
> - [How to use manual partitioning during installation?](https://askubuntu.com/questions/343268/how-to-use-manual-partitioning-during-installation)
> - [How-To: Move your existing Linux install to ZFS on Root
](https://blog.heckel.io/2016/12/31/move-existing-linux-install-zfs-root/)
> - [在Ubuntu 20.04 安裝 ZFS 檔案系統](https://hackmd.io/@cwhu/SysxWbchO#VDEV-in-ZFS)
>- [zpool](https://manpages.ubuntu.com/manpages/focal/man8/zpool.8.html)
> - [How to Enable ZFS Compression](https://linuxhint.com/enable-zfs-compression/)
> - [How to Enable ZFS Deduplication](https://linuxhint.com/zfs-deduplication/#a2)
> [Solaris 11 – ZFS Must known features](https://www.unixarena.com/2013/08/solaris-11-zfs-must-known-features.html/)
> - [Ubuntu: How to mount zfs snapshot?](https://askubuntu.com/questions/103369/ubuntu-how-to-mount-zfs-snapshot)
:::
### 磁碟 (disk)
:::info
### What is 磁碟 (disk)
- 磁碟 (disk) 是一種資料儲存的硬體設備
- 通常由多個可旋轉的磁盤組成,每個磁盤都具有單面或雙面磁性表面。
- 磁頭 (header) : 位於磁碟機上的移動臂 ( arm ) 上,可以在磁碟的不同位置之間移動來讀寫資料。
- track : 一個同心圓
- sector : 由 track 分段成多個 sectors
- block : 可以由多個 sector 組成,而最小為 1 sector
- OS 讀取硬碟的時候,通常一次讀取一個 block

>[圖片來源](https://sites.google.com/site/drewcsci325spring2013/projects/01---file-system/unix-version-6?tmpl=%2Fsystem%2Fapp%2Ftemplates%2Fprint%2F&showPrintDialog=1)
:::
#### data duplicator(dd)
- 多功能的備份工具,屬於較低階的資料處理工具
- 備份與回復整顆硬碟的資料
- 備份與回復原始設備檔案
- 轉換資料格式
- 建立固定大小的檔案
:::warning
通常都會以管理者(root)權限來執行,如果稍有不慎,也很容易造成嚴重的後果
:::
- 支援完整備份
- 常用參數 :
- `if` : 指定的輸入檔案(input file)
- `of` : 指定的輸出檔案(output file)
- `ibs=N`: 指定輸入的區塊大小(input block size),且一次讀取 `N` bytes 的資料
>預設為 512 bytes
- `obs=N`:指定輸出的區塊大小(output block size),且一次寫入 `N` 512 bytes
>預設為 512 bytes 。
- `count=num` : 只處理 num 個輸入區塊,每個區塊的大小為 ibs。
- `bs=N`:指定 block size,一次讀取與寫入 `N` bytes 的資料,此選項會覆蓋 `ibs` 與 `obs` 的設定。
>預設為 512 bytes
:::success
## 實作
### 備份整顆硬碟
- 先查看出系統磁碟的分割狀態
```shell=
lsblk
```

- Name : 設備名稱
- Maj:Min : 顯示設備的主要和次要設備號碼
- MAJ(major number): 表示不同的設備類型
- MIN(minor number): 表示同一個設備的的不同分區
- Rm : 設備是否可移動設備 (1: 可移動的)
- Size : 設備的容量大小
- RO: 設備是否是 Read Only (1: Read Only)
- Type : 顯示塊設備是磁碟還是磁碟中的分區(部分)的訊息。
- Mountpoint : 設備掛在的位置點
> 或者是可透過以下指令查看`sudo fdisk -l`
> loop: Linux 允許使用者建立一個特殊的 block device,透過它他們可以將 file 映射到虛擬 block device
> sda : the first SCSI hard disk
> sd 代表 SCSI 磁盤
- 完整備份硬碟
```shell=
sudo dd if=<要備份硬碟的路徑> of=<備份檔要放置的路徑>
```
- 備份映像檔
```shell=
sudo dd if=<要備份檔案的路徑> of=<備份檔要放置的路徑>.img
```
> 因為備份整顆硬碟要比較久
> 因此採用備份檔案的方式來實作
- 產生特殊檔案 `/dev/zero`
- `/dev/zero` : 以 bit 為單位且內充滿著 0 的特殊檔案
- 用途 : 格式化檔案,用 0 來覆蓋掉原本的 data
```shell=
dd if=/dev/zero of=<Filename> bs=<Block_Size> count=<sets_of_blocksize>
```

- 可以用以下指令驗證,有多少空間 :point_right: 1M * 10 = 10Mega
```shell=
ls -alh
```
>`-h` : 可以讓輸出的資訊以比較容易閱讀的格式呈現
> `-a` : 顯示隱藏的檔案與目錄
> `l` : 顯示檔案與目錄的詳細資訊
- 查看 `<Filename>` 檔 :
>可使用 `hexdump` : 用來檢視二進位檔案的十六進位編碼
來查看 bit 檔
```shell=
hexdump <Filename>
```

- `*` : 與上面這行相同的意思
> 照理來說應該要印出 25 萬 6 千個 0,但是在照片上沒有看到那麼多 0
- 看完整內容
```shell=
hexdump -v <file>
```

:::
>參考資料來源 :
>- [dd 指令教學與實用範例,備份與回復資料的小工具](https://blog.gtwang.org/linux/dd-command-examples/)
>- [What is /dev/zero in Linux?](https://linuxhandbook.com/dev-zero/)
>- [What does an asterisk "*" mean in hexdump output?](https://superuser.com/questions/494245/what-does-an-asterisk-mean-in-hexdump-output)
:::info
### 系統映像檔 (System image)
- 概念 : 就像拍照一樣,完整複製紀錄所有磁區以及系統當下的狀態
- 目的 : 協助將電腦還原到建立系統映像時的狀態
>包括: 系統的狀態、應用程式、啟用狀態、瀏覽歷史記錄、裝置驅動程式、電腦設定
- ex: 電子鑑識 : 當系統被入侵的時候,需要追查電足跡,對數位的證物進行蒐集、分析、鑑定與保存等行為
- 因此為了**不破壞原始的硬碟**裡面的方式,因此我們就會使用 dd 的方式,建立一份系統映像檔,來避免破壞原始資料
#### 系統映像檔 VS 備份 :
- 系統映像檔
- 除了備份一般檔案外,還需要備份更多的檔案(設定、狀態)
- 佔用大量空間: 因為系統映像包含電腦所有磁區上所有內容的完整快照 。
- 復原時只能選擇全部恢復
- 備份
- 可使用不同的備份方法完整備份、差異備份、增量備份
- 備份可以選擇只恢復其中的一個或兩個檔案,可節省時間。
| | 系統映像檔 | 一般備份 |
| -------- | ---------- | -------- |
| 需花費儲存空間 | 較大 | 較小 |
| 備份花費時間 | 久 | 少 |
| 復原選擇| 只能選擇全部恢復 | 可選擇恢復的檔案 |
> 參考資料來源 :
> - [System Image VS Backup – Which One Is Suitable for You?](https://www.minitool.com/backup-tips/system-image-vs-backup.html)
:::
#### Ubuntu 內建
- 輸入 disk

##### 建立映像檔
- 建立磁碟映像檔 : 點選右上角 `⋮`,選擇 `Create Disk Image...`

> 可以選擇儲存在本機或是掛載的硬碟
- 選擇映像檔名稱、儲存位置

- 建立分區映像檔 : 選擇想要的分區,點選 ⚙ 後,點選 `Create Partition Image...`


- 選擇映像檔名稱、儲存位置

##### 復原
- 復原磁碟映像檔 : 點選右上角 `⋮`,選擇 `Restore Disk Image ...`

- 選擇復原的映像檔 : 點選 `Image to Restore` 後,再點選 `Start Restoring...`

<!-- > FIXME: Linux 裡面有 disk 可以做到備份
> FIXME:
> 目前虛擬雞不適合備份
> 現在選擇的虛擬機是會隨著量增加,而增加空間
> 如果要備份,可能會直接備份最大空間量=>會很佔空間 -->
### [ZFS、dd 實作影片連結](https://vimeo.com/813258325/d07c462ee8)