BlueT Matthew Lien
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note No publishing access yet

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.

      Your account was recently created. Publishing will be available soon, allowing you to share notes on your public page and in search results.

      Your team account was recently created. Publishing will be available soon, allowing you to share notes on your public page and in search results.

      Explore these features while you wait
      Complete general settings
      Bookmark and like published notes
      Write a few more notes
      Complete general settings
      Write a few more notes
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights New
    • Engagement control
    • Make a copy
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Note Insights Versions and GitHub Sync Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Make a copy Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note No publishing access yet

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.

    Your account was recently created. Publishing will be available soon, allowing you to share notes on your public page and in search results.

    Your team account was recently created. Publishing will be available soon, allowing you to share notes on your public page and in search results.

    Explore these features while you wait
    Complete general settings
    Bookmark and like published notes
    Write a few more notes
    Complete general settings
    Write a few more notes
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       Owned this note    Owned this note      
    Published Linked with GitHub
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    # Backup 3-2-1 and Disaster Recovery (DR) ## by OCF --- ### Speaker Introduction BlueT - Matthew Lien - 練喆明 韌性架構總顧問 - 行政院 PDIS - 國家資通安全研究院 (Co-)founder of - Ubuntu Taiwan - OSSPlanet 暨大資管講師 - Practical Linux System Administration (LSA) --- ### 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) --- ### The Importance of Backup and DR ---- ### Real-life Scenario: Google Cloud誤刪澳洲大型用戶雲端基礎架構,導致用戶資料遺失與服務中斷 ---- 澳洲退休基金 Unisuper 雲端服務訂閱遭到誤刪,透過第三方備份方能恢復服務 ![螢幕快照 2024-05-19 09-45-18](https://hackmd.io/_uploads/rJhnVlPX0.png) ---- 恭喜你成為~~盜版~~勒索軟體的受害者 ![](https://i.imgur.com/urQpVo0.png =400x) --- ## Introduction --- ### As a ~~NGP/NPO~~ Service Provider --- ### High Availability ---- HA network topology ![image](https://hackmd.io/_uploads/Hkc22yPmC.png) ---- load balancer & autoscaling ![image](https://hackmd.io/_uploads/SyGO6yPmC.png) --- ## HA is not enough HA makes you strong, but not immortal. ---- ### Comparing High Availability with Backup/DR | Aspect | High Availability (HA) | Backup/Disaster Recovery (DR) | |-----------------------------|-----------------------------------------------|------------------------------------------------| | Purpose | Ensures continuous operation with minimal downtime | Ensures data recovery and system restoration after a failure | | Focus | Availability and uptime | Data protection and recovery | | Redundancy | Multiple systems running simultaneously | Periodic data snapshots and copies | | Recovery Time Objective (RTO) | Very low (near-zero) | Higher, dependent on backup and restore processes | | Recovery Point Objective (RPO) | Near-zero | Variable, dependent on backup frequency | | Implementation Complexity | High, requires real-time synchronization and failover mechanisms | Lower, involves regular backup processes and storage | | Cost | High, due to duplicate systems and real-time synchronization | Lower, involves backup storage costs | | Typical Use Cases | Critical applications and services requiring constant uptime | Data protection, regulatory compliance, and recovery from data loss | | Examples | Load balancing, failover clusters | Backup servers, offsite storage, cloud backups | | Data Consistency | Real-time consistency ensured | Consistency based on the latest backup | | Risk Management | Minimizes downtime risks | Mitigates data loss risks | | Maintenance | Requires ongoing monitoring and maintenance of redundant systems | Involves regular backup verification and occasional restoration testing | | Scalability | Scales with additional hardware and complex configurations | Scales with additional storage and backup frequency | ---- ### The Difference Between Backup and DR | Aspect | Backup | Disaster Recovery (DR) | |-----------------------------|-----------------------------------------------|------------------------------------------------| | Purpose | To create copies of data for protection against data loss | To restore full system functionality after a major failure | | Focus | Data protection | Business continuity | | Data Recovery | Restores individual files or data sets | Restores entire systems or environments | | Recovery Time Objective (RTO) | Typically longer, depending on data size and backup method | Shorter, designed for minimal downtime | | Recovery Point Objective (RPO) | Variable, depends on backup frequency | Minimal data loss, depends on DR plan | | Implementation Complexity | Lower, involves regular data backups | Higher, involves comprehensive planning and system setup | | Cost | Lower, based on storage and backup software | Higher, includes backup infrastructure, failover sites, and recovery plans | | Typical Use Cases | Protecting against accidental deletions, hardware failures, and minor data corruptions | Responding to natural disasters, cyber attacks, or major system failures | | Examples | Cloud backups, external hard drives, tape backups | DR sites, failover systems, cloud DR solutions | | Data Consistency | Based on last backup, might not be real-time | Ensures up-to-date data for critical applications | | Maintenance | Requires regular backup schedules and storage management | Requires regular DR plan testing and updates | | Scalability | Scales with additional storage | Scales with more comprehensive and robust DR plans | | Downtime | Downtime depends on the time to restore backups | Designed to minimize downtime | --- ## Fault Tolerance of Disk: RAID ### Protecting Against Hardware Failure - 問題 : - 單顆磁碟的空間容量小 - 單顆的磁碟讀寫速度也不夠快 - 若此單顆磁碟壞了就真的完蛋了 ---- - 在 80 年代發明了此項虛擬化技術來解決 - 透過將多顆磁碟組合起來變成一個儲存裝置使用 - 而此儲存裝置有幾個特殊名詞叫做 **Virtual disk** ( 虛擬磁碟 )、**Logical disk** ( 邏輯磁碟 ) >原因是因為作業系統 (OS) 只會將此多顆磁碟組合視為一個磁碟而已 >對應到的 **Physical disk** ---- - 透過此技術來 : - 資料方便存取 >因已經整合成一台高容量的『虛擬儲存空間』使用,不必在各硬碟間來回切換。 - 容量增加 - 提升讀寫性能 - 容錯、可靠性提升 ---- #### RAID 0 ![](https://i.imgur.com/rwNliSV.png =300x) ![](https://i.imgur.com/fwtyuh5.png) ---- #### RAID 1 ![](https://i.imgur.com/lSATLPJ.png =300x) ---- #### RAID 5 ![](https://i.imgur.com/aiX3HH7.png =400x) ---- #### RAID 6 ![](https://i.imgur.com/kH28Gjn.png) ---- | | 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://i.imgur.com/w0h2aTJ.png =300x) > [圖片來源](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 =400x) > [圖片來源](https://i.imgur.com/8uXuWkL.png) - 至少 6 台硬碟 - 儲存容量 :point_right: ( 1TB * 3 ) + ( 1TB * 3 ) = 4 TB - 結合 RAID 5 與 RAID 0 :point_right: 先做RAID5,再做 RAID 0 ---- ### Case study --- ## The 3-2-1 Backup Strategy ### Understanding the 3-2-1 Rule - 至少備份 3 份 - 至少要儲存於 2 種不同的儲存媒體 >例 : 光碟、外接硬碟、USB、雲端儲存空間 - 至少要有 1 份於異地保存 > 例: 常使用雲端儲存空間 ---- #### Why the 3-2-1 Strategy Works - 至少 3 份資料 > 其中一份壞的,倒底是壞的是哪一個不確定 - 2 種不同儲存裝置 - 1 個異地且離線的儲存 > 當然有錢有空間就是越多份越好,所以後來也有人在推廣 4-3-2 規則 ---- ### Implementing the 3-2-1 Strategy #### Tailoring the 3-2-1 Rule to Your Organization ### Case study: Implementing the 3-2-1 Backup Strategy --- ## 備份的類型 ---- ### Full Backup ( 完整備份 ) - 完整複製一份資料 - 比起其他方式,資料備份所花的時間較長 - 復原資料較快 - 記憶體占用空間大 ---- ### Incremental Backup ( 增量備份 ) ![](https://i.imgur.com/FSWk52D.png) > [圖片來源](http://diun69.blogspot.com/2020/12/blog-post.html) - 一開始會進行完整備份,之後只會備份與 **上一次備份** 的有差異的資料 - 記憶體佔用空間小 - 比起其他方式,資料備份的時間最快 > 因為只要備份與上一次備份有差異的資料即可 - 復原資料最慢 ---- ### Differential Backups ( 差異備份 ) ![](https://i.imgur.com/x57vP7I.png) > [圖片來源](http://diun69.blogspot.com/2020/12/blog-post.html) - 一開始會進行完整備份,之後只會備份與 **上一次完整備份** 有差異的資料 - 比起完整備份,資料備份所花的時間較快 ---- ![](https://i.imgur.com/rpEcFET.png) ---- | | 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://i.imgur.com/TYyYZN8.png) >[圖片來源](https://www.ubackup.com/articles/grandfather-father-son-backup-5740.html) ---- :::success GFS 原則中的**備份頻率**以及**保存的時間**都是可以根據不同的情況和需求去做調整,關係到 Cost( 成本 )、RPO 以及 RTO 。 > RPO、RTO 將在接下來會介紹到 ::: ---- ### Case study 你/妳會怎麼做? ![螢幕快照 2024-05-19 03-52-25](https://hackmd.io/_uploads/rksbBew70.png) ---- ### 關鍵指標 RTO & RPO - 前提 - 公司日常的運作都非常仰賴這些伺服器的ERP相關的系統,而服務斷線即代表公司核心業務無法正常執行,而每分每秒都是成本的耗損😥 ---- - 管理者最大的盲點「只要有備份就好」:point_right:容易讓公司的備份沒有實質的意義 >對於多久備份一次、還原時間點目標、資料恢復時間目標等等重要的目標都疏於規劃 - 以**管理層的角度**談到備份規劃時,需要從以下兩個指標看起 : RTO & RPO - 備份對於公司最大的目標 :point_right: 極小化對公司與使用者功能所帶來的衝擊 ---- ![](https://i.imgur.com/3liCNAX.png) > [ 圖片來源 ](https://www.creative-n.com/blog/what-is-backup-rto-and-rpo/) ---- #### RTO ( Recovery Time Objective ),復原時間目標 - 代表企業最多能夠承受服務中斷多久的時間 >今天公司的服務斷線的時候,要花多少的時間能夠讓公司的服務重新上線 - 目標是為了要確定災害人禍發生時,系統需要花多少時間復原資料 ---- - 而公司該怎麼評估? - 重點取決於**公司能忍受多久** >當中除了員工抱怨之外,所帶來的商業損失 ( 因斷線導致客戶與你的交易沒辦法完成)、員工上班的系統沒辦法使用 ( 人事成本平白的消耗 ),這些都是可以量化的成本項目 - 成本量化:point_right: 分析 : 分析多少的損失是公司今天可以忍受的,公司又願意投入多少的成本去把風險控制在可以忍受的範圍,而此就是規劃的重點 - ex: - 電商服務平台很重要,隨時都要服務客戶,因此 RTO 設定為 1 小時 - 金融系統 5min - 文章分享平台,沒有立即需要服務的需求,因此 RTO 可以較寬鬆,設定為 1 天 --- #### RPO ( Recovery Point Objective ),復原點目標 - 代表可以接受的損失多久的資料量 >今天當公司的系統資料損壞後,透過還原機制可以還原到多久以前的資料? - 目標是提前確保資料恢復和備份功能到位,以最大限度地減少事件期間可能丟失的資料量 - 依據不同的產業、型態,需求與目標都不同 : - ex : 研發密集的產業、線上電商等等 :point_right: 隨時都會有資料的串流,因此每一筆資料都非常重要,對於資料損失的容忍度一定是非常低的 - ex: 每五分鐘做一次增量備份 :point_right: RPO = 5 min ---- :::success 先訂出 RTO、RPO 分析公司能承擔的對應風險,才能評估要花多少資源投資,在成本與效益之間取得平衡,發揮備份的實質意義 ::: ---- ### Determining Appropriate RTO and RPO for Your Organization ![螢幕快照 2024-05-19 04-05-59](https://hackmd.io/_uploads/BydQrgD70.png) ---- Take a break. --- ### Local Backup Solutions #### The Importance of Local Backups ### Backup Media and Devices - Overview of common backup media and devices, such as magnetic tapes, HDDs, SSDs, optical discs, and USB drives. - Comparison of backup media in terms of capacity, durability, portability, and cost. ### Backup Methods for Different Data Types - Explanation of backup methods suitable for different data types (disk, file system, files, databases, VMs). - Examples of tools and techniques used for each data type (e.g., dd for disk imaging, rsync for file-level backups, mysqldump for databases). #### Disk Copy #### Filesystem Backup ##### ZFS File System #### File-Level Backup #### Steps further: Architecture - IaC / Container ### Cloud Backup Solutions #### The Benefits of Cloud Backups ### Hybrid Backup Approaches #### Combining Local and Cloud Backups - The advantages of using a hybrid backup approach that leverages both local and cloud storage. - Strategies for balancing local and cloud backups based on factors like data criticality, recovery speed, and cost. --- ## 4. Backup Software and Tools ### Overview of Popular Backup Software and Tools - Comparison of features and capabilities - Examples of using specific backup tools (e.g., AutoMySQLBackup, Déjà Dup, Vorta, HyperBackup, ActiveBackup) ### Hands-on Workshops: Using Backup Software and Tools --- ## 7. Disaster Recovery (DR) ### Why Disaster Recovery is Essential - disaster + recovery = 災害 + 復原 ( 服務 ) - 代表在**災害** 發生時,是一個能夠將 data center ( 資料中心 ) 的資料即時恢復,並且復原 IT 設備服務的操作手法與架構 ![image](https://hackmd.io/_uploads/HkR-NxD7C.png) ---- 分為以下三種 : - hot site - 擁有與主站點同樣完整的服務 - 資料庫與主站同步,且服務一直都在 - 當災害發生時,可直接支援主站點的服務 - 該站點配備了所有必要的硬碟、軟體以及網路連接 - 最貴 ---- - warm site - 介於 hot site 與 cold site 之間 - 資料庫與主站同步,但服務是沒有上線的 - 災害復原速度慢於 hot site : 主機需要重新啟動需要時間 ---- - cold site - 平常是關機狀態沒有運作,有問題才啟動。 > 停機時間 : RPO + RTO 的最大值 + 服務啟動的時間 - 定期的資料會備份過去 > ex: 可能一個月備份一次完整備份過去,一個禮拜備份一次差異備份,一天備份一次增量備份 - 災害復原速度最慢 : 當真的發生災害時,才開始進行軟體或硬體設備的安裝,使用備份檔進行復原,因此復原時間需要較長的時間 - 最便宜 ---- #### hot DR V.S. warm DR V.S. cold DR | | hot site | warm site | cold site | | ------------ | -------- | --------- | ---------- | | 設備完整度 | 最高👍 | 中間 | 最低 👎 | | 復原速度 | 快 😊 | 中 | 慢 ☹ | | 資料完整度 | 高😊 | 高 😊 | 低 ☹ | | RPO | 小 | 小 | 大 | | RTO | 小 | 中 | 大 | | 成本 (Cost) | 高 ☹ | 中 | 低 😊 | ---- ### Hands-on Workshop: Creating and Testing a DR Plan --- - CIA - confidentiality, integrity and availability - 加密分持 - VeraCrypt ![image](https://hackmd.io/_uploads/SJ-eLXD7R.png) --- ## 9. Conclusion and Q&A ### Key Takeaways and Action Items ### Q&A Session --- Contact: bluet@bluet.org Refs: - https://hackmd.io/@ncnu-opensource/book/https%3A%2F%2Fhackmd.io%2F%40Shaila-Hsiao%2FS1xDRapAs - https://hackmd.io/@ncnu-opensource/book/https%3A%2F%2Fhackmd.io%2Fq2oW90yQQr-DUTOxbe15Sw%3Fview

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password
    or
    Sign in via Facebook Sign in via X(Twitter) Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    By signing in, you agree to our terms of service.

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully