Linux核心之磁碟和分割槽

xshlife2發表於2020-12-22

一: 磁碟
首先磁碟我們都知道,是真正的用來儲存資料的,當然幫我們往裡面寫的軟體就是磁碟驅動了
但是,磁碟寫了擦擦了寫,就會誕生很多不連續的物理空間,
於是,誕生了邏輯分割槽,即在邏輯層面模擬了磁碟分割槽,劃分的單位稱為邏輯卷,即一個邏輯上連續的邏輯卷可能地下連著多個不連續的物理空間
為了描述實現這種對映,於是誕生了物理卷等的概念,所以說所謂"物理"是相對於"邏輯"而言,其實是先有邏輯卷後有物理卷
此時幫上層應用往邏輯卷中寫資料的就是"邏輯卷驅動"了
從底層向上層,一層層來闡述吧
一. 硬體1:磁碟的組成原理
磁碟: 由很多個碟片組成的柱狀裝置,其他器件比如主軸,控制器,磁頭等協作工作將資料寫到磁碟中。

參考連結: https://mp.weixin.qq.com/s?src=11&timestamp=1591758659&ver=2391&signature=O9LSbW4ID2jVfPIcd3RLiBMfKnS-L19FBttwHx0laKOuYe4gqnJQUK7H8jNvGY4Wx08F8KYdjkkj-DZNhbvugrrV6lwHpMpl1bdpnvDLvTMWhoc2fchuRqllZFMQ0i&new=1

platter:碟片
head:磁頭,每個碟片一般有上下兩面,分別對應1個磁頭,共2個磁頭
wxy: 難道還存在有3個磁頭的?
track:磁軌,是從碟片外圈往內圈編號0磁軌,1磁軌…,靠近主軸的同心圓用於停靠磁頭,不儲存資料
wxy: 其作用貌似就是用於劃分的,即我就是分"圈圈"維度的分割符
cylinder:柱面/磁柱,圓柱體被磁軌劃分後得到的就是一個個cylinder,一個磁碟具有cylinder數等同track的數量
wxy: 我的理解稱為磁柱更合適,因為無論是從其英文的含義還是劃分方式,都可以看做是一個空心的水桶,
磁碟是多個水桶套水桶,當然水桶也是有厚度的,這就跟扇區有關係了,下面會說。
另外,為了理解的方便往往稱之為"圈",即內外圈…
sector:扇區, 每個磁軌都被切分成很多扇形區域,每道的扇區數量相同。
wxy: 查了一些資料,sector即扇區確實是指每個磁柱的橫截面上被切分的小區域,切分者是半徑,
所以這裡其實還隱藏一個新的概念: 扇面, 顧名思義就是指橫截面被半徑切分得到的像蛋糕一樣的一個"小面",稱為"扇面"
track 和 扇面的結合就得到了 sector
扇區的大小: 每一個扇區可儲存的位元組資料,一般為512B,扇區為資料儲存的最小單元。
之前,外圈的扇區面積比內圈的大,但是因為使用的磁物質密度不同,所以內外圈(即內外cylinder)上的扇區大小都相同。
現在,內外圈已經採用相同密度物質來儲存資料,但是內外圈扇區數量不同
wxy: 內外圈大小不同,劃分數量又不同,就表示有可能每個扇區大小相同

綜上所述:
磁碟的容量 = 磁頭數 × 磁軌(柱面)數 × 每道扇區數 × 每扇區位元組數。
=有幾面(比如一般都是2面) × 從圓心向外一共有多少層 × 每一層有多少個小扇面單元 × 每一個單元中有多少位元組

二. 分割槽
硬體是死的,想要能用起來就需要驅動,作業系統這些軟體的操作,於是從安裝系統開始來講講到底是怎麼使用這一坨"死的"儲存裝置
所以接下來的概念,就有軟體層面的元素注入了。

  1. windows的分割槽

首先,一塊物理硬碟是沒有什麼分割槽的概念的,但是為了眾所周知的原因需要分成一塊一塊分割槽,如何分呢?誰來分呢?

在裝機(安裝作業系統)之前就需要利用單獨的軟體為其分割槽,然後將分割槽的資訊儲存在主開機記錄(Master Boot Record,MBR)中,

之後開始安裝系統,相當於將作業系統程式放到一個分割槽中,然後將啟動程式(用來啟動作業系統的啟動程式)也放到MBR中

所以,MBR:這是一塊存在於磁碟驅動器開始部分的一個特殊的啟動扇區,正如上面所說的,MBR有兩個作用:記錄分割槽情況和啟動程式

最後,再回到分割槽,有以下幾個特性

1, 分割槽只能分成主分割槽和擴充套件分割槽,其實就是隻能劃分出來一個或幾個主分割槽,剩下的就叫做擴充套件分割槽。所以之有主分割槽才是真正官方圈出的地盤,也才是可以安裝作業系統的

2,主分割槽最多有4個,因為MBR中只能容納4條記錄

3,擴充套件分割槽裡可以再在作業系統層面進行劃分成若干邏輯分割槽

4,當然分割槽後還是不能直接安裝作業系統的,和Linux一樣要格式化,也就是安裝檔案系統。

5,一般我們的劃分都是一個主分割槽(第一分割槽),有了作業系統後就是C盤,然後作業系統會 在剩下的擴充套件分割槽中劃分出DEF…碟符

 分割槽是硬體,碟符是作業系統即軟體層面的東西,所謂分配碟符,就相當於掛載......

6,據說現在使用機械硬碟,所以沒有劃分分割槽的必要了,具體也沒有深究…

  1. Linux的分割槽
    硬碟為什麼要分割槽,這就像整理房間一樣,東西都要分門別類,所以我們就提前規劃好這一區域做什麼那一區域做什麼,而在這裡"區域"就是"分割槽"
    學院派說: 資料安全和效能考慮? 哈哈哈哈哈哈…
    另外,分配單元是cylinder?,每一個分割槽都是連續的cylinder組成。

第一部分: 主開機記錄分割槽
稱為第1分割槽,佔用剛好1個扇區,硬碟的重要資訊都在這一分割槽中,包含三部分
1)MBR(Master Boot Record)區:
規定專門用來存放開機載入程式,佔用446byte,因為主機上電後首先就是從這裡讀取資料,這樣才能進行作業系統的啟動。
2)DPT(Disk Partition table)區:
硬碟分割槽表,記錄硬碟上的分割槽元資訊,佔用64byte,每條分割槽記錄佔用16位元組,所以一塊磁碟最多隻能分4個。那麼我們首先來看看是如何進行分割槽的。
3)特殊標記
用2個位元組存放一個固定值:0x55AA,用來標識這個是第一分割槽
wxy:前面說分割槽的單元是cylinder,那麼這個分割槽只佔用了一個扇區,剩餘的扇區呢?

第二部分: 資料分割槽們
主要用來存放資料,分為2類分割槽: 主分割槽 和 邏輯分割槽
為什麼這麼劃分,那是為了能夠不受只能分4區所限。
試想一下,如果一塊磁碟就劃分成4個分割槽,那麼如果一旦我又插入一個磁碟,我該將他分到哪裡了?你又不能去變更劃分好的分割槽吧(wxy:為什麼不能)
所以,我就搞了一個擴充套件分割槽,類似於二級指標這種,可以在這個分割槽裡可以進一步劃分,即邏輯分割槽
附: 用來存放詩句的分割槽單元我們稱之為"基本分割槽",每一個基本分割槽分為:引導扇區 和 資料扇區
主分割槽(Primary Partion):就是普通用於存放資料的分割槽,主分割槽就是"基本分割槽",分割槽的元資訊被記錄在DPT。這塊分割槽直接就可以使用。
擴充套件分割槽(Extension Partion): 需要再劃分得到邏輯分割槽才能使用,每一個邏輯分割槽都是好比一個帶分割槽磁碟,麻雀雖小五臟俱全,所以每一個邏輯分割槽也包含兩部分:
1) 擴充套件引導記錄,類似於DPT,只不過不用包含MBR,就只有擴充套件分割槽表和0x55AA結束符
2) 擴充套件基本分割槽/邏輯分割槽(Logical Partion):也是兩部分,引導扇區和資料扇區
為了實現邏輯分割槽的劃分,每個邏輯分割槽都需要軟體層面的支援即"邏輯驅動器"

小小結:
主開機記錄分割槽
資料分割槽 — 主分割槽(1 - 4號分割槽)
      擴充套件分割槽(2 - 4號分割槽) ---- 擴充套件引導記錄區
             邏輯分割槽 ( > 5號分割槽) ----- 引導扇區
                                 資料扇區
總結幾個要點:
1 - 4號都是給主分割槽和擴充套件分割槽用的,5號之後才是給邏輯分割槽使用;
主分割槽是實實在在的分割槽,而擴充套件分割槽類似是指標的存在,其指向的下一級才是真正代表儲存介質的分割槽;
主分割槽可以有多個,但是擴充套件分割槽要麼沒有(都是主分割槽), 要麼只有一個(用來指向下一級)

  1. Linux磁碟分割槽命名及分割槽示例
    1). 磁碟裝置的命名
    (1) IDE磁碟為hdx, 其中x取值a ~ d,即hda,hdb, hdc,hdd, 因為IDE磁碟最多四個;
    (2) SCSI,SATA,USB磁碟為sdx, 其中x取值為a ~ z, 即sda,sdb,sdc,sdd,sde,…sdz, 也就是說最多可以有26個磁碟
  1. 分割槽的命名
    hda1 - 4
    sdb1 - 4
    複製程式碼

fdisk -l —檢視所有磁碟,以及磁碟的分割槽情況

磁碟 /dev/sda:1000.2 GB, 1000204886016 位元組,1953525168 個扇區 -----第一個磁碟:/dev/sda, 1000G的硬碟
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 位元組 / 4096 位元組
I/O 大小(最小/最佳):4096 位元組 / 4096 位元組
磁碟標籤型別:dos
磁碟識別符號:0x000809ff

裝置 Boot Start End Blocks Id System
/dev/sda1 * 2048 104859647 52428800 83 Linux ----這個磁碟的主分割槽
/dev/sda2 104859648 1953523711 924332032 8e Linux LVM

磁碟 /dev/mapper/cl-root:53.7 GB, 53687091200 位元組,104857600 個扇區 -----第二個磁碟: 53.7G
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 位元組 / 4096 位元組
I/O 大小(最小/最佳):4096 位元組 / 4096 位元組

磁碟 /dev/mapper/cl-swap:34.4 GB, 34359738368 位元組,67108864 個扇區 ------第三個磁碟
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 位元組 / 4096 位元組
I/O 大小(最小/最佳):4096 位元組 / 4096 位元組

磁碟 /dev/mapper/cl-home:858.5 GB, 858464976896 位元組,1676689408 個扇區 ------第四個磁碟
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 位元組 / 4096 位元組
I/O 大小(最小/最佳):4096 位元組 / 4096 位元組
複製程式碼

  1. 磁碟分割槽相關操作命令

<<<<<<待補充>>>>>>>>>>>>>>>>

  1. 分割槽格式化與掛載

物理磁碟分割槽好之後,如下想要真正被使用,還需要進行格式化,即安裝上檔案系統,從軟體層面將硬體納入到軟體層面的管理中來

詳細的原理參見另一篇博文

https://www.cnblogs.com/shuiguizi/p/12100859.html

三:邏輯卷/物理卷的概念

  1. 為什麼使用卷
    為了解決分割槽空間不夠用或者分割槽空間綽綽有餘的情況.
    解決基本磁碟分割槽的邊界是不能隨意擴充套件的問題,分割槽大小是在剛剛劃分分割槽的時候就決定了。
    LVM將儲存虛擬化,使用邏輯卷,你不會受限於物理磁碟的大小,另外,與硬體相關的儲存設定被其隱藏,你可以不用停止應用或解除安裝檔案系統來調整卷大小或資料遷移.這樣可以減少操作成本.
    LVM與直接使用物理儲存相比,有以下優點:
  2. 靈活的容量.
    當使用邏輯卷時,檔案系統可以擴充套件到多個磁碟上,你可以聚合多個磁碟或磁碟分割槽成單一的邏輯卷.
    2.可伸縮的儲存池.
    你可以使用簡單的命令來擴大或縮小邏輯卷大小,不用重新格式化或分割槽磁碟裝置.
    3.線上的資料再分配.
    你可以線上移動資料,資料可以在磁碟線上的情況下重新分配.比如,你可以線上更換可熱插拔的磁碟.
  3. 方便的裝置命名
    邏輯卷可以按你覺得方便的方式來起任何名稱.
    5.磁碟條塊化.
    你可以生成一個邏輯盤,它的資料可以被條塊化儲存在2個或更多的磁碟上.這樣可以明顯提升資料吞吐量.
    6.映象卷
    邏輯卷提供方便的方法來映象你的資料.
    7.卷快照
    使用邏輯卷,你可以獲得裝置快照用來一致性備份或者測試資料更新效果而不影響真實資料.

wxy: 即分割槽在使用一段時間後碎片化了無法使用連續的空間,另外看來前面想的是對的,果然劃分完了就不能再劃分了。
所以為了解決劃分完還想繼續加工,那麼我們可以將劃分好的儲存空間重新虛擬化出來一個"磁碟",然後對他進行分割槽。

2.實現原理
【核心思想】:
將整個儲存空間在邏輯上劃分成一個一個卷稱為邏輯卷,為了方便和底層硬體對映,又將物理儲存介質統一用一個一個捲來劃分稱為物理卷
而管理這種對映關係的稱為LVM。這個實現可以用如下的一張圖進行闡述。

注意: 物理卷實際是邏輯層面的抽象,只不過是對物理介質的抽象而已,實際上並不存在物理卷。所以按照這樣的思路我們自上而下的開始研究。
LV(Logical Volume): 邏輯卷,相當於為上層提供的儲存單元,類似於實際的物理層面中的磁碟扇區,在邏輯卷之上可以建立檔案系統。
它建立在卷組之上,於是引入VG的概念。
VG(Volume Group:卷組,起到一箇中間轉換的角色,卷組是由一個或多個物理卷組成的儲存池,在卷組上又能建立一個或多個邏輯卷。
wxy: 其實很好理解這個概念,把底層分佈在各處的物理扇區整合成一個個物理卷然後集合在一起成為一個池子,最後就可以將其劃分成整塊的邏輯卷。
PV(Physical Volume): 物理卷,是指在Logical層看到的磁碟分割槽或從與磁碟分割槽具有同樣功能的裝置(如RAID),對於LVM來說就是基本的儲存邏輯塊。
PE(Physical Extent):物理塊,每一個物理卷PV被劃分為稱為PE(Physical Extents)的基本單元,具有唯一編號的PE是可以被LVM定址的最小單元。
PE的大小是可配置的,預設為4MB。所以物理卷(PV)由大小等同的基本單元PE組成。(當PV沒有加入卷組的時候 這時候PV的PE是未定的,
當PV加入卷組,PV的PE大小與卷組設定的PE大小相同)
wxy:我的理解是讓邏輯層面的物理卷並不是直接一對一對應到物理儲存介質,而是用PE來作為度量衡,然後這個度量衡還可配置。
例如上面的圖中,一個物理裝置驅動而能屬於不同的PV,也就是說為了收集各個磁碟裝置上的零散分割槽,用小單元去丈量。

PhysicalStorageMedia:物理儲存介質,指系統的物理儲存裝置,如磁碟(/dev/hda、/dev/sda)等,是儲存系統最底層的儲存單元。
邏輯卷(lv)是將幾個磁碟分割槽或者塊裝置(pv,pv的id必須是8e的,pv可以位於不同的磁碟分割槽裡,pv大小可以不一)組織起來形成一個大的擴充套件分割槽(vg,卷組,一個vg至少要包含一個pv。),該擴充套件分割槽不能直接用,需要將其劃分成邏輯卷(lv)才能使用,lv可以格式化成不同的檔案系統,掛載後直接使用。 lv的擴充套件和縮減是不會影響原有資料的,但邏輯捲縮減的風險大於邏輯卷擴充套件的風險。邏輯卷可以支援快照功能。
邏輯卷只能屬於一個卷組。一個邏輯卷可以:
· 位於一個物理卷
· 跨越一個卷組的多個物理卷
· 多個映象位於同一卷組的不同物理卷
https://github.com/users/cecqa72/projects/1000
https://www.github.com/users/cecqa72/projects/1000
https://github.com/users/cecqa72/projects/1001
https://www.github.com/users/cecqa72/projects/1001
https://github.com/users/cecqa72/projects/1002
https://www.github.com/users/cecqa72/projects/1002
https://github.com/users/cecqa72/projects/1003
https://www.github.com/users/cecqa72/projects/1003
https://github.com/users/cecqa72/projects/1004
https://www.github.com/users/cecqa72/projects/1004
https://github.com/users/cecqa72/projects/1005
https://www.github.com/users/cecqa72/projects/1005
https://github.com/users/cecqa72/projects/1006
https://www.github.com/users/cecqa72/projects/1006
https://github.com/users/cecqa72/projects/1007
https://www.github.com/users/cecqa72/projects/1007
https://github.com/users/cecqa72/projects/1008
https://www.github.com/users/cecqa72/projects/1008
https://github.com/users/cecqa72/projects/1009
https://www.github.com/users/cecqa72/projects/1009
https://github.com/users/cecqa72/projects/1010
https://www.github.com/users/cecqa72/projects/1010
https://github.com/users/cecqa72/projects/1011
https://www.github.com/users/cecqa72/projects/1011
https://github.com/users/cecqa72/projects/1012
https://www.github.com/users/cecqa72/projects/1012
https://github.com/users/cecqa72/projects/1013
https://www.github.com/users/cecqa72/projects/1013
https://github.com/users/cecqa72/projects/1014
https://www.github.com/users/cecqa72/projects/1014
https://github.com/users/cecqa72/projects/1015
https://www.github.com/users/cecqa72/projects/1015
https://github.com/users/cecqa72/projects/1016
https://www.github.com/users/cecqa72/projects/1016
https://github.com/users/cecqa72/projects/1017
https://www.github.com/users/cecqa72/projects/1017
https://github.com/users/cecqa72/projects/1018
https://www.github.com/users/cecqa72/projects/1018
https://github.com/users/cecqa72/projects/1019
https://www.github.com/users/cecqa72/projects/1019
https://github.com/users/cecqa72/projects/1020
https://www.github.com/users/cecqa72/projects/1020
https://github.com/users/cecqa72/projects/1021
https://www.github.com/users/cecqa72/projects/1021
https://github.com/users/cecqa72/projects/1022
https://www.github.com/users/cecqa72/projects/1022
https://github.com/users/cecqa72/projects/1023
https://www.github.com/users/cecqa72/projects/1023
https://github.com/users/cecqa72/projects/1024
https://www.github.com/users/cecqa72/projects/1024
https://github.com/users/cecqa72/projects/1025
https://www.github.com/users/cecqa72/projects/1025
https://github.com/users/cecqa72/projects/1026
https://www.github.com/users/cecqa72/projects/1026
https://github.com/users/cecqa72/projects/1027
https://www.github.com/users/cecqa72/projects/1027
https://github.com/users/cecqa72/projects/1028
https://www.github.com/users/cecqa72/projects/1028
https://github.com/users/cecqa72/projects/1029
https://www.github.com/users/cecqa72/projects/1029
https://github.com/users/cecqa72/projects/1030
https://www.github.com/users/cecqa72/projects/1030
https://github.com/users/cecqa72/projects/1031
https://www.github.com/users/cecqa72/projects/1031
https://github.com/users/cecqa72/projects/1032
https://www.github.com/users/cecqa72/projects/1032
https://github.com/users/cecqa72/projects/1033
https://www.github.com/users/cecqa72/projects/1033
https://github.com/users/cecqa72/projects/1034
https://www.github.com/users/cecqa72/projects/1034
https://github.com/users/cecqa72/projects/1035
https://www.github.com/users/cecqa72/projects/1035
https://github.com/users/cecqa72/projects/1036
https://www.github.com/users/cecqa72/projects/1036
https://github.com/users/cecqa72/projects/1037
https://www.github.com/users/cecqa72/projects/1037
https://github.com/users/cecqa72/projects/1038
https://www.github.com/users/cecqa72/projects/1038
https://github.com/users/cecqa72/projects/1039
https://www.github.com/users/cecqa72/projects/1039
https://github.com/users/cecqa72/projects/1040
https://www.github.com/users/cecqa72/projects/1040
https://github.com/users/cecqa72/projects/1041
https://www.github.com/users/cecqa72/projects/1041
https://github.com/users/cecqa72/projects/1042
https://www.github.com/users/cecqa72/projects/1042
https://github.com/users/cecqa72/projects/1043
https://www.github.com/users/cecqa72/projects/1043
https://github.com/users/cecqa72/projects/1044
https://www.github.com/users/cecqa72/projects/1044
https://github.com/users/cecqa72/projects/1045
https://www.github.com/users/cecqa72/projects/1045
https://github.com/users/cecqa72/projects/1046
https://www.github.com/users/cecqa72/projects/1046
https://github.com/users/cecqa72/projects/1047
https://www.github.com/users/cecqa72/projects/1047
https://github.com/users/cecqa72/projects/1048
https://www.github.com/users/cecqa72/projects/1048
https://github.com/users/cecqa72/projects/1049
https://www.github.com/users/cecqa72/projects/1049
https://github.com/users/cecqa72/projects/1050
https://www.github.com/users/cecqa72/projects/1050
https://github.com/users/cecqa72/projects/1051
https://www.github.com/users/cecqa72/projects/1051
https://github.com/users/cecqa72/projects/1052
https://www.github.com/users/cecqa72/projects/1052
https://github.com/users/cecqa72/projects/1053
https://www.github.com/users/cecqa72/projects/1053
https://github.com/users/cecqa72/projects/1054
https://www.github.com/users/cecqa72/projects/1054
https://github.com/users/cecqa72/projects/1055
https://www.github.com/users/cecqa72/projects/1055
https://github.com/users/cecqa72/projects/1056
https://www.github.com/users/cecqa72/projects/1056
https://github.com/users/cecqa72/projects/1057
https://www.github.com/users/cecqa72/projects/1057
https://github.com/users/cecqa72/projects/1058
https://www.github.com/users/cecqa72/projects/1058
https://github.com/users/cecqa72/projects/1059
https://www.github.com/users/cecqa72/projects/1059
https://github.com/users/cecqa72/projects/1060
https://www.github.com/users/cecqa72/projects/1060
https://github.com/users/cecqa72/projects/1061
https://www.github.com/users/cecqa72/projects/1061
https://github.com/users/cecqa72/projects/1062
https://www.github.com/users/cecqa72/projects/1062
https://github.com/users/cecqa72/projects/1063
https://www.github.com/users/cecqa72/projects/1063
https://github.com/users/cecqa72/projects/1064
https://www.github.com/users/cecqa72/projects/1064
https://github.com/users/cecqa72/projects/1065
https://www.github.com/users/cecqa72/projects/1065
https://github.com/users/cecqa72/projects/1066
https://www.github.com/users/cecqa72/projects/1066
https://github.com/users/cecqa72/projects/1067
https://www.github.com/users/cecqa72/projects/1067
https://github.com/users/cecqa72/projects/1068
https://www.github.com/users/cecqa72/projects/1068
https://github.com/users/hbfs25505/projects/1
https://www.github.com/users/hbfs25505/projects/1
https://github.com/users/hbfs25505/projects/2
https://www.github.com/users/hbfs25505/projects/2
https://github.com/users/hbfs25505/projects/3
https://www.github.com/users/hbfs25505/projects/3
https://github.com/users/hbfs25505/projects/4
https://www.github.com/users/hbfs25505/projects/4
https://github.com/users/hbfs25505/projects/5
https://www.github.com/users/hbfs25505/projects/5
https://github.com/users/hbfs25505/projects/6
https://www.github.com/users/hbfs25505/projects/6
https://github.com/users/hbfs25505/projects/7
https://www.github.com/users/hbfs25505/projects/7
https://github.com/users/hbfs25505/projects/8
https://www.github.com/users/hbfs25505/projects/8
https://github.com/users/hbfs25505/projects/9
https://www.github.com/users/hbfs25505/projects/9
https://github.com/users/hbfs25505/projects/10
https://www.github.com/users/hbfs25505/projects/10
https://github.com/users/hbfs25505/projects/11
https://www.github.com/users/hbfs25505/projects/11
https://github.com/users/hbfs25505/projects/12
https://www.github.com/users/hbfs25505/projects/12
https://github.com/users/hbfs25505/projects/13
https://www.github.com/users/hbfs25505/projects/13
https://github.com/users/hbfs25505/projects/14
https://www.github.com/users/hbfs25505/projects/14
https://github.com/users/hbfs25505/projects/15
https://www.github.com/users/hbfs25505/projects/15
https://github.com/users/hbfs25505/projects/16
https://www.github.com/users/hbfs25505/projects/16
https://github.com/users/hbfs25505/projects/17
https://www.github.com/users/hbfs25505/projects/17
https://github.com/users/hbfs25505/projects/18
https://www.github.com/users/hbfs25505/projects/18
https://github.com/users/hbfs25505/projects/19
https://www.github.com/users/hbfs25505/projects/19
https://github.com/users/hbfs25505/projects/20
https://www.github.com/users/hbfs25505/projects/20
https://github.com/users/hbfs25505/projects/21
https://www.github.com/users/hbfs25505/projects/21
https://github.com/users/hbfs25505/projects/22
https://www.github.com/users/hbfs25505/projects/22
https://github.com/users/hbfs25505/projects/23
https://www.github.com/users/hbfs25505/projects/23
https://github.com/users/hbfs25505/projects/24
https://www.github.com/users/hbfs25505/projects/24
https://github.com/users/hbfs25505/projects/25
https://www.github.com/users/hbfs25505/projects/25
https://github.com/users/hbfs25505/projects/26
https://www.github.com/users/hbfs25505/projects/26
https://github.com/users/hbfs25505/projects/27
https://www.github.com/users/hbfs25505/projects/27
https://github.com/users/hbfs25505/projects/28
https://www.github.com/users/hbfs25505/projects/28
https://github.com/users/hbfs25505/projects/29
https://www.github.com/users/hbfs25505/projects/29
https://github.com/users/hbfs25505/projects/30
https://www.github.com/users/hbfs25505/projects/30
https://github.com/users/hbfs25505/projects/31
https://www.github.com/users/hbfs25505/projects/31
https://github.com/users/hbfs25505/projects/32
https://www.github.com/users/hbfs25505/projects/32
https://github.com/users/hbfs25505/projects/33
https://www.github.com/users/hbfs25505/projects/33
https://github.com/users/hbfs25505/projects/34
https://www.github.com/users/hbfs25505/projects/34
https://github.com/users/hbfs25505/projects/35
https://www.github.com/users/hbfs25505/projects/35
https://github.com/users/hbfs25505/projects/36
https://www.github.com/users/hbfs25505/projects/36
https://github.com/users/hbfs25505/projects/37
https://www.github.com/users/hbfs25505/projects/37
https://github.com/users/hbfs25505/projects/38
https://www.github.com/users/hbfs25505/projects/38
https://github.com/users/hbfs25505/projects/39
https://www.github.com/users/hbfs25505/projects/39
https://github.com/users/hbfs25505/projects/40
https://www.github.com/users/hbfs25505/projects/40
https://github.com/users/hbfs25505/projects/41
https://www.github.com/users/hbfs25505/projects/41
https://github.com/users/hbfs25505/projects/42
https://www.github.com/users/hbfs25505/projects/42
https://github.com/users/hbfs25505/projects/43
https://www.github.com/users/hbfs25505/projects/43
https://github.com/users/hbfs25505/projects/44
https://www.github.com/users/hbfs25505/projects/44
https://github.com/users/hbfs25505/projects/45
https://www.github.com/users/hbfs25505/projects/45
https://github.com/users/hbfs25505/projects/46
https://www.github.com/users/hbfs25505/projects/46
https://github.com/users/hbfs25505/projects/47
https://www.github.com/users/hbfs25505/projects/47
https://github.com/users/hbfs25505/projects/48
https://www.github.com/users/hbfs25505/projects/48
https://github.com/users/hbfs25505/projects/49
https://www.github.com/users/hbfs25505/projects/49
https://github.com/users/hbfs25505/projects/50
https://www.github.com/users/hbfs25505/projects/50
https://github.com/users/hbfs25505/projects/51
https://www.github.com/users/hbfs25505/projects/51
https://github.com/users/hbfs25505/projects/52
https://www.github.com/users/hbfs25505/projects/52
https://github.com/users/hbfs25505/projects/53
https://www.github.com/users/hbfs25505/projects/53
https://github.com/users/hbfs25505/projects/54
https://www.github.com/users/hbfs25505/projects/54
https://github.com/users/hbfs25505/projects/55
https://www.github.com/users/hbfs25505/projects/55
https://github.com/users/hbfs25505/projects/56
https://www.github.com/users/hbfs25505/projects/56
https://github.com/users/hbfs25505/projects/57
https://www.github.com/users/hbfs25505/projects/57
https://github.com/users/hbfs25505/projects/58
https://www.github.com/users/hbfs25505/projects/58
https://github.com/users/hbfs25505/projects/59
https://www.github.com/users/hbfs25505/projects/59
https://github.com/users/hbfs25505/projects/60
https://www.github.com/users/hbfs25505/projects/60
https://github.com/users/hbfs25505/projects/61
https://www.github.com/users/hbfs25505/projects/61
https://github.com/users/hbfs25505/projects/62
https://www.github.com/users/hbfs25505/projects/62
https://github.com/users/hbfs25505/projects/63
https://www.github.com/users/hbfs25505/projects/63
https://github.com/users/hbfs25505/projects/64
https://www.github.com/users/hbfs25505/projects/64
https://github.com/users/hbfs25505/projects/65
https://www.github.com/users/hbfs25505/projects/65
https://github.com/users/hbfs25505/projects/66
https://www.github.com/users/hbfs25505/projects/66
https://github.com/users/hbfs25505/projects/67
https://www.github.com/users/hbfs25505/projects/67
https://github.com/users/hbfs25505/projects/68
https://www.github.com/users/hbfs25505/projects/68
https://github.com/users/hbfs25505/projects/69
https://www.github.com/users/hbfs25505/projects/69
https://github.com/users/hbfs25505/projects/70
https://www.github.com/users/hbfs25505/projects/70
https://github.com/users/hbfs25505/projects/71
https://www.github.com/users/hbfs25505/projects/71
https://github.com/users/hbfs25505/projects/72
https://www.github.com/users/hbfs25505/projects/72
https://github.com/users/hbfs25505/projects/73
https://www.github.com/users/hbfs25505/projects/73
https://github.com/users/hbfs25505/projects/74
https://www.github.com/users/hbfs25505/projects/74
https://github.com/users/hbfs25505/projects/75
https://www.github.com/users/hbfs25505/projects/75
https://github.com/users/hbfs25505/projects/76
https://www.github.com/users/hbfs25505/projects/76
https://github.com/users/hbfs25505/projects/77
https://www.github.com/users/hbfs25505/projects/77
https://github.com/users/hbfs25505/projects/78
https://www.github.com/users/hbfs25505/projects/78
https://github.com/users/hbfs25505/projects/79
https://www.github.com/users/hbfs25505/projects/79
https://github.com/users/hbfs25505/projects/80
https://www.github.com/users/hbfs25505/projects/80
https://github.com/users/hbfs25505/projects/81
https://www.github.com/users/hbfs25505/projects/81
https://github.com/users/hbfs25505/projects/82
https://www.github.com/users/hbfs25505/projects/82
https://github.com/users/hbfs25505/projects/83
https://www.github.com/users/hbfs25505/projects/83
https://github.com/users/hbfs25505/projects/84
https://www.github.com/users/hbfs25505/projects/84
https://github.com/users/hbfs25505/projects/85
https://www.github.com/users/hbfs25505/projects/85
https://github.com/users/hbfs25505/projects/86
https://www.github.com/users/hbfs25505/projects/86
https://github.com/users/hbfs25505/projects/87
https://www.github.com/users/hbfs25505/projects/87
https://github.com/users/hbfs25505/projects/88
https://www.github.com/users/hbfs25505/projects/88
https://github.com/users/hbfs25505/projects/89
https://www.github.com/users/hbfs25505/projects/89
https://github.com/users/hbfs25505/projects/90
https://www.github.com/users/hbfs25505/projects/90
https://github.com/users/hbfs25505/projects/91
https://www.github.com/users/hbfs25505/projects/91
https://github.com/users/hbfs25505/projects/92
https://www.github.com/users/hbfs25505/projects/92
https://github.com/users/hbfs25505/projects/93
https://www.github.com/users/hbfs25505/projects/93
https://github.com/users/hbfs25505/projects/94
https://www.github.com/users/hbfs25505/projects/94
https://github.com/users/hbfs25505/projects/95
https://www.github.com/users/hbfs25505/projects/95
https://github.com/users/hbfs25505/projects/96
https://www.github.com/users/hbfs25505/projects/96
https://github.com/users/hbfs25505/projects/97
https://www.github.com/users/hbfs25505/projects/97
https://github.com/users/hbfs25505/projects/98
https://www.github.com/users/hbfs25505/projects/98
https://github.com/users/hbfs25505/projects/99
https://www.github.com/users/hbfs25505/projects/99
https://github.com/users/hbfs25505/projects/100
https://www.github.com/users/hbfs25505/projects/100
https://github.com/users/hbfs25505/projects/101
https://www.github.com/users/hbfs25505/projects/101
https://github.com/users/hbfs25505/projects/102
https://www.github.com/users/hbfs25505/projects/102
https://github.com/users/hbfs25505/projects/103
https://www.github.com/users/hbfs25505/projects/103
https://github.com/users/hbfs25505/projects/104
https://www.github.com/users/hbfs25505/projects/104
https://github.com/users/hbfs25505/projects/105
https://www.github.com/users/hbfs25505/projects/105
https://github.com/users/hbfs25505/projects/106
https://www.github.com/users/hbfs25505/projects/106
https://github.com/users/hbfs25505/projects/107
https://www.github.com/users/hbfs25505/projects/107
https://github.com/users/hbfs25505/projects/108
https://www.github.com/users/hbfs25505/projects/108
https://github.com/users/hbfs25505/projects/109
https://www.github.com/users/hbfs25505/projects/109
https://github.com/users/hbfs25505/projects/110
https://www.github.com/users/hbfs25505/projects/110
https://github.com/users/hbfs25505/projects/111
https://www.github.com/users/hbfs25505/projects/111
https://github.com/users/hbfs25505/projects/112
https://www.github.com/users/hbfs25505/projects/112
https://github.com/users/hbfs25505/projects/113
https://www.github.com/users/hbfs25505/projects/113
https://github.com/users/hbfs25505/projects/114
https://www.github.com/users/hbfs25505/projects/114
https://github.com/users/hbfs25505/projects/115
https://www.github.com/users/hbfs25505/projects/115
https://github.com/users/hbfs25505/projects/116
https://www.github.com/users/hbfs25505/projects/116
https://github.com/users/hbfs25505/projects/117
https://www.github.com/users/hbfs25505/projects/117
https://github.com/users/hbfs25505/projects/118
https://www.github.com/users/hbfs25505/projects/118
https://github.com/users/hbfs25505/projects/119
https://www.github.com/users/hbfs25505/projects/119
https://github.com/users/hbfs25505/projects/120
https://www.github.com/users/hbfs25505/projects/120
https://github.com/users/hbfs25505/projects/121
https://www.github.com/users/hbfs25505/projects/121
https://github.com/users/hbfs25505/projects/122
https://www.github.com/users/hbfs25505/projects/122
https://github.com/users/hbfs25505/projects/123
https://www.github.com/users/hbfs25505/projects/123
https://github.com/users/hbfs25505/projects/124
https://www.github.com/users/hbfs25505/projects/124
https://github.com/users/hbfs25505/projects/125
https://www.github.com/users/hbfs25505/projects/125
https://github.com/users/hbfs25505/projects/126
https://www.github.com/users/hbfs25505/projects/126
https://github.com/users/hbfs25505/projects/127
https://www.github.com/users/hbfs25505/projects/127
https://github.com/users/hbfs25505/projects/128
https://www.github.com/users/hbfs25505/projects/128
https://github.com/users/hbfs25505/projects/129
https://www.github.com/users/hbfs25505/projects/129
https://github.com/users/hbfs25505/projects/130
https://www.github.com/users/hbfs25505/projects/130
https://github.com/users/hbfs25505/projects/131
https://www.github.com/users/hbfs25505/projects/131
https://github.com/users/hbfs25505/projects/132
https://www.github.com/users/hbfs25505/projects/132
https://github.com/users/hbfs25505/projects/133
https://www.github.com/users/hbfs25505/projects/133
https://github.com/users/hbfs25505/projects/134
https://www.github.com/users/hbfs25505/projects/134
https://github.com/users/hbfs25505/projects/135
https://www.github.com/users/hbfs25505/projects/135
https://github.com/users/hbfs25505/projects/136
https://www.github.com/users/hbfs25505/projects/136
https://github.com/users/hbfs25505/projects/137
https://www.github.com/users/hbfs25505/projects/137
https://github.com/users/hbfs25505/projects/138
https://www.github.com/users/hbfs25505/projects/138
https://github.com/users/hbfs25505/projects/139
https://www.github.com/users/hbfs25505/projects/139
https://github.com/users/hbfs25505/projects/140
https://www.github.com/users/hbfs25505/projects/140
https://github.com/users/hbfs25505/projects/141
https://www.github.com/users/hbfs25505/projects/141
https://github.com/users/hbfs25505/projects/142
https://www.github.com/users/hbfs25505/projects/142
https://github.com/users/hbfs25505/projects/143
https://www.github.com/users/hbfs25505/projects/143
https://github.com/users/hbfs25505/projects/144
https://www.github.com/users/hbfs25505/projects/144
https://github.com/users/hbfs25505/projects/145
https://www.github.com/users/hbfs25505/projects/145
https://github.com/users/hbfs25505/projects/146
https://www.github.com/users/hbfs25505/projects/146
https://github.com/users/hbfs25505/projects/147
https://www.github.com/users/hbfs25505/projects/147
https://github.com/users/hbfs25505/projects/148
https://www.github.com/users/hbfs25505/projects/148
https://github.com/users/hbfs25505/projects/149
https://www.github.com/users/hbfs25505/projects/149
https://github.com/users/hbfs25505/projects/150
https://www.github.com/users/hbfs25505/projects/150
https://github.com/users/hbfs25505/projects/151
https://www.github.com/users/hbfs25505/projects/151
https://github.com/users/hbfs25505/projects/152
https://www.github.com/users/hbfs25505/projects/152
https://github.com/users/hbfs25505/projects/153
https://www.github.com/users/hbfs25505/projects/153
https://github.com/users/hbfs25505/projects/154
https://www.github.com/users/hbfs25505/projects/154
https://github.com/users/hbfs25505/projects/155
https://www.github.com/users/hbfs25505/projects/155
https://github.com/users/hbfs25505/projects/156
https://www.github.com/users/hbfs25505/projects/156
https://github.com/users/hbfs25505/projects/157
https://www.github.com/users/hbfs25505/projects/157
https://github.com/users/hbfs25505/projects/158
https://www.github.com/users/hbfs25505/projects/158
https://github.com/users/hbfs25505/projects/159
https://www.github.com/users/hbfs25505/projects/159
https://github.com/users/hbfs25505/projects/160
https://www.github.com/users/hbfs25505/projects/160
https://github.com/users/hbfs25505/projects/161
https://www.github.com/users/hbfs25505/projects/161
https://github.com/users/hbfs25505/projects/162
https://www.github.com/users/hbfs25505/projects/162
https://github.com/users/hbfs25505/projects/163
https://www.github.com/users/hbfs25505/projects/163
https://github.com/users/hbfs25505/projects/164
https://www.github.com/users/hbfs25505/projects/164
https://github.com/users/hbfs25505/projects/165
https://www.github.com/users/hbfs25505/projects/165
https://github.com/users/hbfs25505/projects/166
https://www.github.com/users/hbfs25505/projects/166
https://github.com/users/hbfs25505/projects/167
https://www.github.com/users/hbfs25505/projects/167
https://github.com/users/hbfs25505/projects/168
https://www.github.com/users/hbfs25505/projects/168
https://github.com/users/hbfs25505/projects/169
https://www.github.com/users/hbfs25505/projects/169
https://github.com/users/hbfs25505/projects/170
https://www.github.com/users/hbfs25505/projects/170
https://github.com/users/hbfs25505/projects/171
https://www.github.com/users/hbfs25505/projects/171
https://github.com/users/hbfs25505/projects/172
https://www.github.com/users/hbfs25505/projects/172
https://github.com/users/hbfs25505/projects/173
https://www.github.com/users/hbfs25505/projects/173
https://github.com/users/hbfs25505/projects/174
https://www.github.com/users/hbfs25505/projects/174
https://github.com/users/hbfs25505/projects/175
https://www.github.com/users/hbfs25505/projects/175
https://github.com/users/hbfs25505/projects/176
https://www.github.com/users/hbfs25505/projects/176
https://github.com/users/hbfs25505/projects/177
https://www.github.com/users/hbfs25505/projects/177
https://github.com/users/hbfs25505/projects/178
https://www.github.com/users/hbfs25505/projects/178
https://github.com/users/hbfs25505/projects/179
https://www.github.com/users/hbfs25505/projects/179
https://github.com/users/hbfs25505/projects/180
https://www.github.com/users/hbfs25505/projects/180
https://github.com/users/hbfs25505/projects/181
https://www.github.com/users/hbfs25505/projects/181
https://github.com/users/hbfs25505/projects/182
https://www.github.com/users/hbfs25505/projects/182
https://github.com/users/hbfs25505/projects/183
https://www.github.com/users/hbfs25505/projects/183
https://github.com/users/hbfs25505/projects/184
https://www.github.com/users/hbfs25505/projects/184
https://github.com/users/hbfs25505/projects/185
https://www.github.com/users/hbfs25505/projects/185
https://github.com/users/hbfs25505/projects/186
https://www.github.com/users/hbfs25505/projects/186
https://github.com/users/hbfs25505/projects/187
https://www.github.com/users/hbfs25505/projects/187
https://github.com/users/hbfs25505/projects/188
https://www.github.com/users/hbfs25505/projects/188
https://github.com/users/hbfs25505/projects/189
https://www.github.com/users/hbfs25505/projects/189
https://github.com/users/hbfs25505/projects/190
https://www.github.com/users/hbfs25505/projects/190
https://github.com/users/hbfs25505/projects/191
https://www.github.com/users/hbfs25505/projects/191
https://github.com/users/hbfs25505/projects/192
https://www.github.com/users/hbfs25505/projects/192
https://github.com/users/hbfs25505/projects/193
https://www.github.com/users/hbfs25505/projects/193
https://github.com/users/hbfs25505/projects/194
https://www.github.com/users/hbfs25505/projects/194
https://github.com/users/hbfs25505/projects/195
https://www.github.com/users/hbfs25505/projects/195
https://github.com/users/hbfs25505/projects/196
https://www.github.com/users/hbfs25505/projects/196
https://github.com/users/hbfs25505/projects/197
https://www.github.com/users/hbfs25505/projects/197
https://github.com/users/hbfs25505/projects/198
https://www.github.com/users/hbfs25505/projects/198
https://github.com/users/hbfs25505/projects/199
https://www.github.com/users/hbfs25505/projects/199
https://github.com/users/hbfs25505/projects/200
https://www.github.com/users/hbfs25505/projects/200
https://github.com/users/hbfs25505/projects/201
https://www.github.com/users/hbfs25505/projects/201
https://github.com/users/hbfs25505/projects/202
https://www.github.com/users/hbfs25505/projects/202
https://github.com/users/hbfs25505/projects/203
https://www.github.com/users/hbfs25505/projects/203
https://github.com/users/hbfs25505/projects/204
https://www.github.com/users/hbfs25505/projects/204
https://github.com/users/hbfs25505/projects/205
https://www.github.com/users/hbfs25505/projects/205
https://github.com/users/hbfs25505/projects/206
https://www.github.com/users/hbfs25505/projects/206
https://github.com/users/hbfs25505/projects/207
https://www.github.com/users/hbfs25505/projects/207
https://github.com/users/hbfs25505/projects/208
https://www.github.com/users/hbfs25505/projects/208
https://github.com/users/hbfs25505/projects/209
https://www.github.com/users/hbfs25505/projects/209
https://github.com/users/hbfs25505/projects/210
https://www.github.com/users/hbfs25505/projects/210
https://github.com/users/hbfs25505/projects/211
https://www.github.com/users/hbfs25505/projects/211
https://github.com/users/hbfs25505/projects/212
https://www.github.com/users/hbfs25505/projects/212
https://github.com/users/hbfs25505/projects/213
https://www.github.com/users/hbfs25505/projects/213
https://github.com/users/hbfs25505/projects/214
https://www.github.com/users/hbfs25505/projects/214
https://github.com/users/hbfs25505/projects/215
https://www.github.com/users/hbfs25505/projects/215
https://github.com/users/hbfs25505/projects/216
https://www.github.com/users/hbfs25505/projects/216
https://github.com/users/hbfs25505/projects/217
https://www.github.com/users/hbfs25505/projects/217
https://github.com/users/hbfs25505/projects/218
https://www.github.com/users/hbfs25505/projects/218
https://github.com/users/hbfs25505/projects/219
https://www.github.com/users/hbfs25505/projects/219
https://github.com/users/hbfs25505/projects/220
https://www.github.com/users/hbfs25505/projects/220
https://github.com/users/hbfs25505/projects/221
https://www.github.com/users/hbfs25505/projects/221
https://github.com/users/hbfs25505/projects/222
https://www.github.com/users/hbfs25505/projects/222
https://github.com/users/hbfs25505/projects/223
https://www.github.com/users/hbfs25505/projects/223
https://github.com/users/hbfs25505/projects/224
https://www.github.com/users/hbfs25505/projects/224
https://github.com/users/hbfs25505/projects/225
https://www.github.com/users/hbfs25505/projects/225
https://github.com/users/hbfs25505/projects/226
https://www.github.com/users/hbfs25505/projects/226
https://github.com/users/hbfs25505/projects/227
https://www.github.com/users/hbfs25505/projects/227
https://github.com/users/hbfs25505/projects/228
https://www.github.com/users/hbfs25505/projects/228
https://github.com/users/hbfs25505/projects/229
https://www.github.com/users/hbfs25505/projects/229
https://github.com/users/hbfs25505/projects/230
https://www.github.com/users/hbfs25505/projects/230
https://github.com/users/hbfs25505/projects/231
https://www.github.com/users/hbfs25505/projects/231
https://github.com/users/hbfs25505/projects/232
https://www.github.com/users/hbfs25505/projects/232
https://github.com/users/hbfs25505/projects/233
https://www.github.com/users/hbfs25505/projects/233
https://github.com/users/hbfs25505/projects/234
https://www.github.com/users/hbfs25505/projects/234
https://github.com/users/hbfs25505/projects/235
https://www.github.com/users/hbfs25505/projects/235
https://github.com/users/hbfs25505/projects/236
https://www.github.com/users/hbfs25505/projects/236
https://github.com/users/hbfs25505/projects/237
https://www.github.com/users/hbfs25505/projects/237
https://github.com/users/hbfs25505/projects/238
https://www.github.com/users/hbfs25505/projects/238
https://github.com/users/hbfs25505/projects/239
https://www.github.com/users/hbfs25505/projects/239
https://github.com/users/hbfs25505/projects/240
https://www.github.com/users/hbfs25505/projects/240
https://github.com/users/hbfs25505/projects/241
https://www.github.com/users/hbfs25505/projects/241
https://github.com/users/hbfs25505/projects/242
https://www.github.com/users/hbfs25505/projects/242
https://github.com/users/hbfs25505/projects/243
https://www.github.com/users/hbfs25505/projects/243

相關文章