操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    內容簡介

    1、第一部分第四課:磁盤分區,并完成Ubuntu安裝

    2、第一部分第五課預告:Unity桌面,人生若只如初見

    磁盤分區

    上一課我們正式開始安裝Ubuntu了,但是到了分區的那一步,小編卻戛然而止。這是什么情況呢?

    請讀者們千萬不要扁我;如果真的要扁,那就請“海扁”,讓我一次挨(愛)個夠(想到了庾澄慶的《讓我一次愛個夠》),體會一下蘇武的感覺。

    是這樣的:磁盤分區是個很重要且比較難的知識點。

    所以我們單獨用這一課來講磁盤分區的概念,磁盤的組成,文件系統,等。

    磁盤分區應該算是安裝Linux系統的很關鍵的一步了。它可以將我們的硬盤劃分為幾個區域,特別是裝雙系統時(比如在Windows操作系統之外再安裝一個Linux系統)必不可少的一步。

    劃分硬盤的好處就是我們的操作系統不會互相干擾,可以各安其職。

    所以在接著上一課的安裝Ubuntu的步驟繼續進行前,我們需要學習以下什么是磁盤分區和磁盤分區的作用。

    注:希望大家如果是裝雙系統,比如在Windows外安裝Ubuntu,或者Mac OS外安裝Ubuntu,請事先備份一下原系統。雖說按照我們這個課程的步驟一點點進行,應該是不會出什么亂子。但是磁盤分區是有一定風險的:分得好,歡天喜地;分得不好,可歌可泣。

    總之謹慎為好。

    掀起磁盤的蓋頭來

    這一章我們來認識一下硬盤。硬盤一般叫做Hard Disk。

    目前的硬盤一般分為HDD(Hard Disk Drive,傳統的磁碟型機械硬盤)和SSD(Solid State Disk,固態硬盤)。

    我們下面舉例的硬盤是HDD。SSD是近些年的熱門,很多人現在買電腦都喜歡配備固態硬盤的,其價格昂貴,但是速度比傳統的磁碟型硬盤快很多。

    一般電腦的硬盤是什么樣子的呢:

    看到了嗎?上面就是硬盤的大致外觀了。

    那么硬盤內部是什么樣子的呢?

    是不是有點像留聲機。留聲機里面是一張唱片,會不停旋轉,然后由磁頭去“讀取”數據。

    硬盤雖然通常不是一張磁碟,而是幾張磁碟疊在一起,但是原理和留聲機還有點像,硬盤的轉速比留聲機高很多,硬盤也是由磁頭去讀寫數據。

    用下圖對比一下HDD硬盤(左)和SSD硬盤(右):

    1. 傳統機械硬盤(HDD):由盤片、磁頭、轉軸、控制電機等部分組成。工作時盤片轉動,磁頭定位在盤片的指定位置上進行讀寫操作,從某種意義上與老式留聲機的結構相似。傳統硬盤的優勢在于容量大、成本低,壽命也相對較長,適合進行大容量的數據寫入;但缺點也非常明顯,比如體積重量大、發熱量大、速度慢、不抗震、噪音大等等。

    2. SSD固態硬盤:一般使用NAND閃存制成。由于不存在機械部件,所以穩定性、噪音、發熱量、抗震性都要比傳統機械硬盤更好,另外讀寫速度也更快。當然,閃存的造價較高,所以SSD的價格也更高。以同樣1TB容量為例,傳統機械硬盤僅需500元左右,而SSD則至少需要2000元。

    硬盤儲存數據的原理

    硬盤包括一至數片高速轉動的磁盤以及放在執行器懸臂上的磁頭。

    在平整的磁性表面存儲和檢索數字數據,信息通過離磁性表面很近的磁頭,由電磁流來改變極性方式被電磁流寫到磁盤上,信息可以通過相反的方式讀取,例如讀頭經過紀錄數據的上方時磁場導致線圈中電氣信號的改變。

    磁盤的物理結構

    硬盤的物理結構一般由磁頭與碟片、電動機、主控芯片與排線等部件組成;當主電動機帶動碟片旋轉時,副電動機帶動一組(磁頭)到相對應的碟片上并確定讀取正面還是反面的碟面,磁頭懸浮在碟面上畫出一個與碟片同心的圓形軌道(磁軌或稱柱面),這時由磁頭的磁感線圈感應碟面上的磁性與使用硬盤廠商指定的讀取時間或數據間隔定位扇區,從而得到該扇區的數據內容。

    1. 磁道:當磁盤旋轉時,磁頭若保持在一個位置上,則每個磁頭都會在磁盤表面劃出一個圓形軌跡,這些圓形軌跡就叫做磁道(Track)。

    2. 柱面:在有多個盤片構成的盤組中,由不同盤片的面,但處于同一半徑圓的多個磁道組成的一個圓柱面(Cylinder)。

    3. 扇區:磁盤上的每個磁道被等分為若干個弧段,這些弧段便是硬盤的扇區(Sector)。硬盤的第一個扇區,叫做引導扇區。

    4. 磁頭(Head):硬盤讀取數據的關鍵部件,它的主要作用就是將存儲在硬盤盤片上的磁信息轉化為電信號向外傳輸,而它的工作原理則是利用特殊材料的電阻值會隨著磁場變化的原理來讀寫盤片上的數據,磁頭的好壞在很大程度上決定著硬盤盤片的存儲密度。

    5. 盤片(Platter):硬盤中承載數據存儲的介質。硬盤盤片是以堅固耐用的材料為盤基,將磁粉附著在鋁合金(新材料也有用玻璃)圓盤片的表面上,表面被加工的相當平滑。這些磁粉被劃分成稱為磁道的若干個同心圓,在每個同心圓的磁道上就好像有無數的任意排列的小磁鐵,它們分別代表著0和1的狀態。當這些小磁鐵受到來自磁頭的磁力影響時,其排列的方向會隨之改變。利用磁頭的磁力控制指定的一些小磁鐵方向,使每個小磁鐵都可以用來儲存信息。硬盤是由多個盤片疊加在一起,互相之間由墊圈隔開。

    注:每個盤片都有兩面,因此也會相對應每碟片有2個磁頭。

    磁盤的邏輯結構

    操作系統(WIndows,Linux或Mac OS之類)對硬盤進行讀寫時需要用到文件系統把硬盤的扇區組合成簇,并創建文件和樹形目錄制度,使操作系統對其訪問和查找變得容易,這是因為操作系統直接對數目眾多的扇區進行尋址會十分麻煩。

    1. A:磁道

    2. B:扇面

    3. C:扇區

    4. D:簇(Cluster,扇區組)

    在硬盤上定位某一數據記錄位置:扇區。使用了三維定位。

    磁盤碎片整理

    認識了硬盤的基本原理,我們接著來講一下磁盤碎片整理吧。

    什么是磁盤碎片整理呢?

    其實顧名思義,我們已經可以大致猜出個八九不離十。

    磁盤碎片整理簡單來說就是通過系統軟件或者專業的磁盤碎片整理軟件對電腦磁盤在長期使用過程中產生的碎片和凌亂文件重新整理,可提高電腦的整體性能和運行速度。

    磁盤碎片應該稱為文件碎片,是因為文件被分散保存到整個磁盤的不同地方,而不是連續地保存在磁盤連續的簇中形成的。

    硬盤在使用一段時間后,由于反復寫入和刪除文件,磁盤中的空閑扇區會分散到整個磁盤中不連續的物理位置上,從而使文件不能存在連續的扇區里。這樣,再讀寫文件時就需要到不同的地方去讀取,增加了磁頭的來回移動,降低了磁盤的訪問速度。

    磁盤碎片整理前:

    磁盤碎片整理后:

    磁盤碎片整理的好處:

    1. 經過碎片整理后,我們硬盤的磁盤里的文件變得緊湊了,不會散放在各處。這樣我們讀寫數據時就不用到不同的地方提取。我們的操作系統可以運行得更快(假如你使用一臺電腦好幾年,從來沒有進行過磁盤碎片整理,突然做一下整理,那提速還是比較明顯的)。

    2. 第二個好處對我們這課很有用。因為我們這課主要是要進行磁盤分區,以便合理安排我們的Linux操作系統和Windows操作系統。碎片整理為磁盤分區做好了充分的準備。如果不做碎片整理,那么可能有一定風險(難得會出現)操作系統的某些文件的一部分會由于磁盤分區而消失,這樣你的Windows系統就會不穩定了。

    正因為碎片整理幾乎是有利無害,在開始安裝我們的Ubuntu系統之前,最好對我們的Windows系統做一個“磁盤碎片整理”。這樣可以使我們的硬盤更加“干凈”,“規整”。

    下面演示Win7下如何進行磁盤碎片整理:

    1. 開始->所有程序->附件->系統工具->磁盤碎片整理程序

    2. 點擊“磁盤碎片整理程序”之后,會出現如下的窗口:

    3. 點擊“分析磁盤”按鈕

    4. 分析完之后就可以進行整理了,點擊“整理磁盤碎片”按鈕

    注意:進行磁盤清理過程中,盡量不要關閉電腦或者重啟,也盡量不要移動電腦,否則可能會使磁盤受損。一般來說是不會有太大問題的。不過還是應該小心愛護我們的電腦兄,這樣它才能更好地服務我們。

    什么是磁盤分區

    為了更好地解釋磁盤分區,我們借助一些圖來闡述。

    首先,我們把你目前的硬盤比作一個圓圈,如下圖:

    我們可以看到:如果你的硬盤里只裝有Windows操作系統的話,那么大致印象是這樣的。

    我們可以說此時硬盤大致都是Windows的,既然Windows操作系統一家獨大,那么它基本就可以隨自己意愿在硬盤上存放文件。

    假如我們此時又安裝了Linux操作系統,因為不可能把兩個操作系統安裝在硬盤的相同地方,所以IT科學家們發明了“磁盤分區”(分區的英語是“Partition”)。

    磁盤分區簡單地說就是使用分區編輯器(partition editor)在磁盤上劃分幾個邏輯部分,幸好不是真拿刀把硬盤切割成好幾塊,分區是虛擬的概念。

    假設我們將硬盤對半分區,50%給Linux,50%保留給Windows,那么硬盤的情況如下:

    這樣,這兩個操作系統就可以和平共存了。

    文件系統

    在每個分區中,文件都是按照一定方法被存儲和組織起來的,這種方法我們稱為“文件系統”(File System)。

    用戶使用文件系統來保存數據不必關心數據實際保存在硬盤(或者光盤)的地址為多少的數據塊上,只需要記住這個文件的所屬目錄和文件名。

    文件系統還規定誰有權利訪問這個或那個文件。現代的文件系統有不少都是日志文件系統(Journaling file system),在文件系統發生故障(如內核崩潰或突然停電)時,日志文件系統更容易保持一致性,并且可以較快恢復。

    嚴格地說, 文件系統是一套實現了數據的存儲、分級組織、訪問和獲取等操作的抽象數據類型(Abstract data type)。

    很重要的一條規則:每個分區只能有一種文件系統!

    文件系統有好多不同種類。我們來認識一下吧:

    微軟(Microsoft)的文件系統(包括DOS和Windows操作系統的)

    1. FAT16:一種有一定年代的文件系統,可以管理不大于4GB的分區。很多中文的資料中都說FAT16只能管理不大于2GB的分區,那是因為它們是基于DOS,Win 95,Win 98和Win ME操作系統來講的,在這些操作系統上,確實FAT16只能管理不大于2GB的分區。但是英文的資料(微軟Microsoft官方的資料)顯示的是4GB,是說的Windows XP系統上最多管理不大于4GB的分區。

      為什么是4GB呢?因為FAT16中的16表示16位的簇(cluster,之前說過cluster是多個扇區的意思,通常每個扇區為512個字節),在Windows XP系統里FAT16文件系統中簇的大小最大可以達到65536個字節。2的16次方是65536。所以65536 * 65536=4294967296=4 * 1024 * 1024 * 1024 ,所以是4GB(1 GB=1024 MB=1024 * 1024 KB=1024 * 1024 * 1024 B。這里的B是Byte的縮寫,1024是2的10次方)。而DOS,Win 95,Win 98和Win ME操作系統中,簇最大是32768個字節,所以FAT16在這些操作系統里確實只能管理2GB大小的分區。FAT16在DOS操作系統至Windows XP(衍生自Windows NT系統)中都有使用。

    2. FAT32:從Win 98開始流行,是FAT32的增強版本。可以管理不大于2TB的分區(1TB=1024GB,所以2TB=2048GB)。FAT16和FAT32這對“胖胖兄弟組合”(fat是英語“胖”的意思。當然其實FAT是File Allocation Table的縮寫,表示“文件分配表”)在生產磁盤碎片方面可是一把好手,因為簇的管理方式存在一個缺陷就是可能會浪費空間,就不深入解釋了,不然今天的課是沒完了。所以對于這兩種文件系統,你需要經常進行磁盤碎片整理,不然你的分區會越來越亂。

    3. NTFS:在Win NT操作系統中首次被使用,后來我們也知道Win NT演進為Win XP,一直到現在的Win 10,其實都是Win NT內核的不斷演進。所以NTFS是New Technology File System,也就是NT(New Technology)的文件系統。NTFS可以管理16Eo的分區(也就是近似 16000000000 GB),當然這是理論值。

      NTFS也是以簇為單位來存儲數據文件,但NTFS中簇的大小并不依賴于磁盤或分區的大小。簇尺寸的縮小不但降低了磁盤空間的浪費,還減少了產生磁盤碎片的可能。比之FAT文件系統,NTFS在系統故障或突然斷電時,可以更容易地恢復數據,因為它是日志型文件系統。NTFS還可以對文件進行加密,壓縮等。但是它也會產生磁盤碎片,只不過比之FAT文件系統要好很多。

    當然更早期的文件系統還有FAT12,FAT8等。

    我覺得初學者看到上面的簇,扇區,字節,1024,4GB,16Eo等等,是不是都要瘋了。

    不要緊,慢慢學就理解了。暫時記不住概念或者不理解,也沒太大關系。

    Linux的文件系統

    1. ext2:這個文件系統在Linux下使用了很久。ext是英語Extended的前三個字母,是“擴展的”的意思。由法國程序員Remy Card設計,他也是ext(第一代擴展文件系統)的設計者。小小自豪一下,因為小編住在法國。ext文件系統的一大優勢是幾乎不怎么產生磁盤碎片,所以在Linux系統下一般不需要進行磁盤碎片整理。

    2. ext3:ext3和ext2很接近,不過ext3是日志型文件系統,所以比之ext2(不是日志型),ext3在故障時可以恢復數據。ext3和ext2高度兼容。

    3. ext4:ext3的演進,擴大了磁盤分區的大小,進一步減少了磁盤碎片的產生機率。

    所以ext2,ext3和ext4分別是Second Extended Filesystem,Third Extended Filesystem和Fourth Extended Filesystem的縮寫,表示第二代擴展文件系統,第三代擴展文件系統和第四代擴展文件系統。

    選擇什么文件系統呢?

    那么我們選擇什么文件系統呢?

    目前來說,不少Windows操作系統還是使用著NTFS文件系統,不少Linux操作系統還是使用著ext3文件系統。

    不過我們就要趕上時代,就要任性。所以我們選擇ext4作為Linux的文件系統。畢竟ext4比ext3性能更好。

    準備好了嗎?來進行磁盤分區吧

    上一課忘了說一個事,因為上一課還沒講磁盤和磁盤分區等概念。

    就是安裝Ubuntu之前,最好先在Windows下面就把留給Ubuntu系統的安裝分區給分好。

    在Windows下,右鍵點擊我的電腦》管理》磁盤管理,選擇一個空間較大的盤,右鍵選擇壓縮卷。下圖中為Ubuntu14.04劃分了80G的空間(空間大小根據自己的需要自行選擇,如果只是安裝作為練習使用有30G就可以了。要是自己有運行的程序或者要處理數據還是建議多分一點空間。不過現在一般電腦的硬盤都很大的,有的都1TB,為什么不多分點給Ubuntu呢。記得小編那時候2011年裝Ubuntu 10.04時都分了60GB給Ubuntu),設置好容量大小后點壓縮即可,不用給它設置盤符,我們在安裝Ubuntu的時候再重新分區。

    注意:這種分區我們在Win7里面不能直接查看Ubuntu里的分區,但是在Ubuntu我們可以訪問放在硬盤上的任何東西,也就是可以直接查看Win7系統的分區。

    如果這步在安裝Ubuntu前沒做的話,可能要重新來過了(就是在上一課的安裝過程中取消當前安裝,再重來一遍)。

    當然在Ubuntu的安裝過程里再去給Ubuntu系統分出一塊空間也是可以的,只不過可能會不小心抹掉Windows的一些關鍵分區,比如Recovery分區(用于恢復系統)。

    那么我們在假定讀者已經事先給Ubuntu分好分區的情況下接著上一課的最后一步講:

    話說上一課我們最后一步是到了類似這樣的:

    可以看到有好些設備。什么 /dev/sda,它的下面包含了 /dev/sda1,/dev/sda5,/dev/sda6。

    這些sda什么的是啥意思呀?

    這些其實都是Linux下磁盤分區的名稱。dev是英語device的頭三個字母,表示設備文件。

    1. 第一個字母:h或s。h表示IDE接口的硬盤。s表示SATA或SCSI接口的硬盤。

    2. 第二個字母:總是d。英語drive的首字母,表示磁盤驅動器。

    3. 第三個字母:a,b,c,d,等等。表示順序。

    因此:

    1. hda一般是指IDE接口的硬盤,hda一般指第一塊硬盤(磁盤),類似的有hdb,hdc等。

    2. sda一般是指SATA或SCSI接口的硬盤,sda一般指第一塊硬盤(磁盤),類似的有sdb,sdc等。

    所以sda1是指第一塊硬盤的第一個分區,sda5就是第一塊硬盤的第五個分區,依次類推。

    sdb1就是第二塊硬盤的第一個分區,等等。

    現在的內核都會把硬盤,移動硬盤,U盤之類的識別為sdX的形式。

    我們注意到上圖中還有一個空閑分區(白色的那條),大小是85.9GB,這個其實就是一開始我們在Windows下面給Ubuntu分出來的80GB的空間了。

    所以現在我們就來操作這個空閑“分區”,以對我們將要安裝的Ubuntu進行安排。

    鼠標選中它,點擊下面的“+”號,會彈出如下對話框:

    新分區的類型選擇“邏輯分區”,用于選擇“交換空間”。

    SWAP分區

    SWAP分區也叫交換分區,就是LINUX下的虛擬內存分區。

    它的作用是在物理內存使用完之后,將磁盤空間(也就是SWAP分區)虛擬成內存來使用。

    它和Windows系統的交換文件作用類似,但是它是一段連續的磁盤空間,并且對用戶不可見。

    需要注意的是,雖然這個SWAP分區能夠作為"虛擬"的內存,但它的速度比物理內存可是慢多了。

    因此如果需要更快的速度的話,并不能寄厚望于SWAP,最好的辦法仍然是加大物理內存,SWAP分區只是臨時的解決辦法。

    所以對于交換分區,我們就給它分配大小和你電腦的內存大小一樣的就好了。例子中給了8000MB,就是不到8GB(假設內存是8GB)。

    主分區和邏輯分區

    1. 主分區:英語是Primary Partition。也稱為主磁盤分區,和擴展分區、邏輯分區一樣,是一種分區類型。主分區中不能再劃分其他類型的分區,因此每個主分區都相當于一個邏輯磁盤(在這一點上主分區和邏輯分區很相似,但主分區是直接在硬盤上劃分的,邏輯分區則必須建立于擴展分區中)。早期MBR模式分區只能劃分四個分區,現在的GPT分區至少可以劃分128個主分區,未來很有可能將不存在擴展分區和邏輯分區的概念。一個硬盤的主分區包含操作系統啟動所必需的文件和數據的硬盤分區,要在硬盤上安裝操作系統,則硬盤必須有一個主分區

    2. 邏輯分區:英語是Logical Partition。是硬盤上一塊連續的區域,不同之處在于,每個主分區只能分成一個驅動器,每個主分區都有各自獨立的引導塊,可以用fdisk設定為啟動區。一個硬盤上最多可以有4個主分區,而擴展分區上可以劃分出多個邏輯驅動器。這些邏輯驅動器沒有獨立的引導塊,不能用fdisk設定為啟動區。

    引導分區

    分配完SWAP交換分區之后,我們來分配引導分區,也就是引導操作系統啟動的程序所在的分區。很重要。

    在Win XP及Win 7 和 Win 8及Win 10中,我們的操作是不一樣的。

    在Win7或Win XP中,新建分區,點擊“+”,設置Ubuntu啟動引導區,一般劃分200Mb足夠了,如下圖所示:

    在Win 8或Win 10中,新建分區,點擊“+”,設置Ubuntu啟動引導區,用于EFI boot partition,一般劃分幾百Mb足夠了,如下圖所示:

    根分區

    根分區也就是 / 分區,相當于Windows系統的C盤。在Linux系統里,/是最上層目錄。

    /的下面會有其他文件夾,如 home, user, bin, dev, tmp, sbin, 等等。

    我們給根分區分配個大概25GB或更大就夠了,然后剩下的空間用同樣添加分區的方式分給/home 分區,用于存放我們用戶的文件。

    然后很重要的一點:記得將“安裝啟動引導器的設備”選擇稱為之前分配/boot的那個分區名。如下圖中,是sdb2,但是你的情況可能是其他名字:

    結束Ubuntu的安裝

    完成了最艱巨的磁盤分區之后,接下來的步驟就像走馬觀花一般簡單了。可以喝杯咖啡,吃個烤雞,慢慢來配置安裝:

    接下來根據提示選擇時區:

    在國內的小伙伴選擇北京所在時區就好(時區選擇不是很要緊,隨便選),然后點擊“Continue”,下一步:

    選擇鍵盤布局,我們選擇漢語,當然你也可以選擇其他語言:

    點擊繼續,下一步:

    設置用戶名,密碼,等。點擊“繼續”,下一步:

    開始安裝,請耐心等待。

    安裝完成,點擊重啟。

    假如是Win 8 或Win 10(UEFI作為啟動引導的)的用戶,那么重啟之后,進入UEFI(BIOS),將Ubuntu置為第一啟動項,保存退出。

    進入Ubuntu,安裝完成。

    假如是Win 7的用戶,如果重啟之后發現啟動選項沒有Ubuntu,而是直接進了Windows系統。這時候你吃了一半的烤雞是不是會把你噎著...

    那就需要在Windows中,用EasyBCD這樣的軟件來添加啟動引導項了。

    用EasyBCD修改系統啟動項

    1. 在Windows中安裝EasyBCD后打開,點擊“Add New Entry”》選擇Linux/BSD:具體設置如下圖。Type選擇GRUB(Legacy);Name自己隨便寫,小編寫的是Ubuntu作為標識;Drive:選取我們設置的/boot分區,有Linux標記。設置完成后點擊“Add Entry”。

    電腦再次啟動時,就可以看到多了Ubuntu的啟動選項(有一個Ubuntu Recovery Mode的,這個是在Ubuntu的啟動有問題時,才須要進入的安全模式/恢復模式,以便解決問題。一般不要進這個模式)了。

    你可以用鍵盤上的上下鍵選擇進入哪個系統:Windows還是Ubuntu。

    建議參考這兩篇百度經驗的圖文教程:

    《UEFI下Win 8.1+Ubuntu 14.04安裝教程》

    http://jingyan.baidu.com/article/e3c78d6460e6893c4c85f5b1.html

    《Win7下U盤安裝Ubuntu14.04雙系統步驟詳解》

    http://jingyan.baidu.com/article/76a7e409bea83efc3b6e1507.html

    長噓一口氣,終于結束了。安裝Linux還是挺不容易的,有很多概念。

    所以嘛,如果不是為了學習Linux,小編真的不建議安裝Linux系統。雖然Ubuntu系統的安裝已經越來越簡單,但是對于大部分網友來說還是挺繁瑣的。

    平時么,用用Windows和Mac OS就夠了。還是比爾蓋茨的Windows最親民,玩Dota等游戲可只能用Windows...

    這篇文章寫了十幾個小時,好多年沒玩Dota的我都想來一把Dota了輕松一下了~ 可惜沒裝...

    總結

    1. Ubuntu不同版本在不同操作系統上的安裝過程不盡相同,小編的課程不可能面面俱到。這個課程演示了Windows上安裝Ubuntu 14.04的過程。如果是在其他操作系統(比如Mac OS)上安裝其他版本的Ubuntu(比如12.04,13.04,15.04),請自行Google和百度。一般差異是不太大的。

    2. 大部分新的如Win 8,Win 10系統的引導程序由傳統的BIOS變成了更強大的UEFI。所以安裝Ubuntu的過程與在Win XP和Win7中有那么一點不同。

    3. 一個硬盤可以被“虛擬化”地分割成不同的部分,這是磁盤分區的主要原理。

    4. 為了安裝Linux系統(我們用了Ubuntu這個Linux發行版)到硬盤里,我們需要先進行磁盤分區。即把原先都屬于Windows操作系統的磁盤空間劃出一份來給Ubuntu使用。

    5. 我們分配了一個大小和內存差不多的SWAP交換分區,這個分區可以在內存快耗盡時用作虛擬內存使用。

    6. 我們可以用Ubuntu系統的GRUB來引導Ubuntu和Windows啟動;也可以用Windows的引導程序來引導兩個系統。推薦用Windows的引導程序。

    第一部分第五課預告

    今天的課就到這里,一起加油吧!

    下一課我們學習:Unity桌面,人生若只如初見

    *新朋友請關注「程序員聯盟」微信搜公眾號 ProgrammerLeague

    程序員聯盟官網:

    http://coderunity.com/

    小編微信號: frogoscar

    小編郵箱: enmingx@gmail.com

    主要介紹標題中寫明的項目部署流程,以及解決部署過程中可能遇到的一些問題,在開始之前,墻裂推薦這篇文檔:

    Setting up Django and your web server with uWSGI and nginx

    看完這篇文檔,你可能已經能夠解決90%(甚至100%)的問題了,剩下10%的問題(我所遇到的)將穿插在我部署的過程中進行解決。

    (第一次部署的過程十分粗糙,遇到的很多問題都沒有妥善記錄下來,現在另起一個比較干凈的服務器,重新部署一下,好把之前的坑過一遍,另外對配置進行一些優化)

    如果按照本文流程,仍然配置不成功的話,請按照以下幾點排除問題:

    1. 檢查服務器端口配置
    2. 檢查配置文件是否正確
    3. 檢查部署過程中各個項目的版本是否和本文一致(版本更新后可能導致配置變化)
    4. 檢查防火墻(我配置時沒有遇到這個問題)
    5. google…
    6. 歡迎留言,一起解決問題~

    環境

    阿里云: Ubuntu 14.04 64位

    本機:windows10

    python:3.6.6

    工具

    IDE:Pycharm(代碼部署功能比較好用)

    文件圖形化客戶端:WinSCP(查看服務器文件結構)

    virtualbox虛擬機(這個其實無所謂,只是覺得開個虛擬機直連服務器比較舒服一點)

    預配置

    申請一個阿里云服務器

    獲取服務器實例

    獲取IP

    配置安全組([配置放行端口](

    ))

    連接服務器

    連接服務器的方法很多,不一一贅述了,我比較喜歡在Ubuntu系統下使用ssh直連

    安裝ssh

    sudo apt-get install ssh

    連接目標服務器

    ssh root@xx.xx.xxx.xxx

    xxx部分為服務器的公網IP地址,root為用戶名(不推薦使用root賬戶進行后續部署操作)

    配置用戶

    給服務器系統添加自定義用戶,后面的操作都在該用戶下(本文中添加并使用賬戶名為breavo,賬戶名可任意取)

    sudo adduser breavo

    詳細過程可以自行google:)

    (創建用戶后請務必添加sudo權限,避免后續出現權限問題)

    使用pyenv管理python版本

    由于各個項目之間存在python的版本問題,而服務器中自帶的python2(現在也自帶python3了,但是版本可能不符合需求)是遠遠無法滿足需求的,導致的結果就是你的服務器中安裝了多個python版本,每個項目依賴不同的版本運行。那么管理的必要性是不言而喻的了,另外每個項目需要一個獨立的運行環境(項目依賴需要分開管理,否則會變成噩夢),這一點通過創建虛擬環境來解決。

    下載pyenv

    首先對系統環境進行一下更新,確保后面的操作不會因為缺少某個工具導致失敗

    sudo apt-get update

    安裝curl,git

    sudo apt-get install curl git-core

    安裝pyenv

    curl -L https://raw.github.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
    1
    

    這個命令會把pyenv安裝到當前用戶的~/.pyenv目錄下.(本文中為/home/breavo/.pyenv)

    同樣,在用戶目錄下找到.bashrc文件,將下面的代碼添加至文件內容末尾(本文中bashrc文件路徑在/home/breavo下,可自行對應到自己的路徑)

    export PYENV_ROOT="${HOME}/.pyenv"
    if [ -d "${PYENV_ROOT}" ]; then
     export PATH="${PYENV_ROOT}/bin:${PATH}"
     eval "$(pyenv init -)"
    fi
    1
    2
    3
    4
    5
    6
    

    修改后保存~

    這段代碼的作用主要是指明pyenv的位置,以便以后可以直接在命令行里面運行pyenv命令。 保存在~/.bashrc 文件中是為了每次用戶登陸后自動生效。

    所以如果你是第一次運行命令并且沒有注銷的話, 這一段是不會生效的, 我們還需要運行下面的命令令其生效

    source ~/.bashrc
    1
    

    然后就可以直接在命令行里面敲pyenv了。

    安裝pyenv參考文章:點擊這里

    Python安裝

    pyenv安裝完了,接下來安裝我們需要的python版本,首先查看一下目前python有哪些版本可以安裝

    pyenv install --list
    1
    

    會打印一串很長的列表,網上滑一滑,可以看下如下圖所示。


    我們就安裝圖中畫圈的這個版本

    pyenv install 3.6.6 -v

    (注:這里install的時候最好加一個 -v,否則安裝過程信息是不會打印在控制臺的,看上去就好像安裝進度卡住了一樣,首次安裝可能會引起疑惑)


    安裝失敗==,原因是一些依賴還沒有裝上

    sudo apt-get install make build-essential libssl-dev zlib1g-dev
    sudo apt-get install libbz2-dev libreadline-dev libsqlite3-dev wget
    sudo apt-get install llvm libncurses5-dev libncursesw5-dev
    1
    2
    3
    

    依賴安裝完畢之后,再次pyenv install 3.6.6 -v

    順利完成~

    注:到這一步為止有一個坑,很多人喜歡安裝最新的版本(python 3.7.0+),在依賴全部安裝完畢的情況下,依舊會出現下圖提示。


    問題是Open SSL已經安裝過了(就是這個libssl-dev),當時排查這個問題排查了很久,到最后,發現是因為沒有配置的情況下,本地的OpenSSL根本沒有支持到python3.7.0+

    pyenv builds/installs openssl into a sub-directory of a new installation prefix, but Python is not configured to use it. Without ./configure --with-openssl=${somewhere} it will favor the system’s OpenSSL. In the case of Darwin, this always fails because the version of OpenSSL is no longer supported (Python >=3.7.0).

    問題鏈接:Python 3.7.0 :: The Python ssl extension was not compiled. Missing the OpenSSL lib?

    前面排查的時候根本沒往那方面想,結果悲劇了,浪費了很多時間==~

    pyenv基本操作

    安裝完成,查看一下

    pyenv versions
    1
    

    發現python3.6.6已經安裝進系統了~

    切換系統默認python環境

    pyenv global 3.6.6
    1
    

    當前系統默認python版本已經變成3.6.6了,可以輸入python命令check一下

    卸載某個python版本

    pyenv uninstall x.x.x
    1
    

    另外pyenv還有各種其他命令行操作,可自行google了解~

    重新打開遠程SSH窗口可能會遇到pyenv command not found問題,重新source一下.bashrc文件

    或者

    查看解決方案:戳這里

    配置虛擬環境

    準備

    開始配置之前,不妨閱讀一下pyenv-virtualenv ReadMe

    (可選 + 推薦)自動激活虛擬環境

    通過pyenv安裝完成后,連帶著virtualenv也安裝完成了,我們可以通過pyenv命令完成虛擬環境的配置

    在 pyenv-virtualenv中,由于需要從根本上處理一些已知的問題(關于$PATH和shell提示符),activate/deactivate提示符將會在未來的版本中移除(目前依然可以使用,但是會彈出warning,我是覺得不爽啦~)

    問題鏈接:Question regarding prompt changing

    根據作者的建議,我們可以如下方式完成虛擬環境的配置和激活

    運行

    $ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile

    重啟一下shell

    $ exec "$SHELL"
    1
    

    運行

    pyenv virtualenv 3.6.6 eshop

    其中3.6.6是需要指定的python版本, eshop是虛擬環境的名稱(隨便起的~)

    此時,虛擬環境已經創建完成并自動激活,可以通過pyenv versions查看,如下圖所示。


    通過 pyenv shell xxx(xxx為python版本號或者虛擬環境名稱)切換環境,效果如下圖


    原有的激活方式

    運行

    pyenv virtualenv 3.6.6 eshop

    激活/反激活虛擬環境

    pyenv activate eshop

    pyenv deactivate

    最后

    卸載虛擬環境

    pyenv uninstall

    至此,虛擬環境的搭建就算完成了~

    Nginx基本配置

    sudo apt-get install nginx
    1
    

    運行

    sudo /etc/init.d/nginx start # start nginx
    1
    

    如果出現sudo: unable to resolve host問題,參考這里

    如果出現端口占用情況,通過修改配置文件換用其他端口(如8000)

    如果出現端口沒被占用但無法訪問,請回到配置安全組出查看端口策略是否配置完備

    打開瀏覽器訪問 xx.xx.xxx.xxx:80,其中xxxx是你的公網IP,80是Nginx默認監聽的端口號

    出現


    這個表示Nginx已經成功安裝并運行起來了

    (可選)服務端配置數據庫

    本文以postgresql為例進行安裝配置

    基本配置

    參考文章:Ubuntu 安裝和配置postgresql

    安裝postgresql

    sudo apt-get install postgresql

    安裝完成后服務器系統會自動創建一個名為postgres的賬戶(數據庫超級用戶),密碼為空

    切換到postgres

    sudo su postgres
    1
    

    登陸postgresql

    psql postgres
    1
    

    在postgresql界面繼續輸入如下命令(注意末尾加分號)

    ALTER USER postgres with PASSWORD 'postgres';
    1
    

    修改成功后輸入’\q’ 退出postgresql

    退出postgres賬戶可以直接輸入exit后回車或者ctrl + d

    上述流程正確的情況下如下圖所示。


    遠程登陸

    編輯pgsql配置文件,運行

    vim /etc/postgresql/9.1/main/postgresql.conf

    或者利用WinSCP界面進行編輯(本篇文章中所有配置文件編輯均使用WinSCP + sublime,個人喜好)

    修改配置文件如下:

    監聽任何地址訪問,修改連接權限

    # listen_addresses=‘localhost’
    改為 
    listen_addresses=‘*’
    1
    2
    3
    

    啟用密碼驗證

    # password_encryption=on 
    改為 
    password_encryption=on
    1
    2
    3
    

    編輯 /etc/postgresql/9.1/main/pg_hba.conf,在文件末尾添加

    # to allow your client visiting postgresql server
    host all all 0.0.0.0 0.0.0.0 md5
    1
    2
    

    保存上述修改

    最后,重啟數據庫

    sudo service postgresql restart


    至此,數據庫配置完成了

    可以通過登陸測試一下,直接登陸或者使用PgAdmin都可以,不再贅述

    Django項目代碼上傳

    上傳

    前面配置了這么多,Django項目還沒有上傳到服務器呢,確保本地有一個可運行Django項目(廢話:P)

    上傳方式很多

    1. 通過WinSCP直接上傳(左邊拖到右邊,完成~)
    2. 通過pycharm進行代碼部署(推薦)
    3. 其他

    新建的用戶可能會遇到上傳的權限問題,解決方法戳Permissions on /var/www/html for uploading web site files via SFTP

    查看用戶xxx所在組以及組內成員

    groups xxx

    更改文件上傳目錄的用戶和用戶組

    sudo chown breavo:breavo /file/upload/path

    為用戶組添加寫權限

    sudo chmod -R 775 /file/upload/path

    項目試運行

    設置django settings.py

    ALLOWED_HOSTS=['*']
    1
    

    安裝項目依賴(依賴寫入requirements.txt中,每個依賴注意添加版本號)

    cd 到你存放requirement.txt的目錄, 運行

    pip install -r requirements.txt

    等待依賴安裝完成,cd到項目目錄下,運行

    python manage.py runserver 0.0.0.0:8000

    打開瀏覽器輸入服務器地址,查看

    xx.xx.xxx.xxx:8000 (xxx為服務器公網IP地址)

    項目正常運行~(如果settings.py文件中的DEBUG設置為False,會觀察到靜態資源無法加載)

    Nginx代理

    在項目中配置Nginx

    在項目目錄下添加一個config文件夾,后面的配置文件都統一放到該文件夾下(配置文件存放路徑不統一會導致輸入提示符時運行不成功)

    config文件下新建mysite_nginx.conf文件,內容如下(將路徑替換成你自己的項目路徑或者對應文件):

    # mysite_nginx.conf
    # the upstream component nginx needs to connect to
    upstream django {
     # unix:///home/breavo/PyWorkSpace/mysite_code_shuffle/config/eshop.sock
     # server unix:///path/to/your/mysite/mysite.sock; # for a file socket
     server 127.0.0.1:8001; # for a web port socket (we'll use this first)
    }
    # configuration of the server
    server {
     # the port your site will be served on
     listen 8000;
     # the domain name it will serve for
     server_name xx.xx.xxx.xxx; # substitute your machine's IP address or FQDN
     charset utf-8;
     # max upload size
     client_max_body_size 75M; # adjust to taste
     # Django media
     location /media {
     # /home/breavo/PyWorkSpace/mysite_code_shuffle/meida;
     alias /path/to/your/mysite/media; # your Django project's media files - amend as required
     }
     location /static {
     # /home/breavo/PyWorkSpace/mysite_code_shuffle/static
     alias /path/to/your/mysite/static; # your Django project's static files - amend as required
     }
     # Finally, send all non-media requests to the Django server.
     location / {
     uwsgi_pass django;
     include /home/breavo/PyWorkSpace/mysite_code_shuffle/config/uwsgi_params; # the uwsgi_params file you installed
     }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    

    在/etc/nginx/sites-enabled中創建一個鏈接,這樣Nginx能夠發現并啟用我們的配置,運行

    sudo ln -s ~/path/to/your/mysite/mysite_nginx.conf /etc/nginx/sites-enabled/
    1
    

    部署靜態文件

    在運行Nginx之前,需要將django項目中的所有靜態文件放入static文件夾,在mysite/settings.py中添加

    STATIC_ROOT=os.path.join(BASE_DIR, "static/")
    1
    

    然后運行

    python manage.py collectstatic
    1
    

    啟動(重啟)Nginx

    sudo /etc/init.d/nginx start
    1
    

    簡單測試

    往服務器項目的media文件夾里丟一個圖片(這里以test.png為例)


    訪問

    xx.xx.xxx.xxx:8000/media/test.png
    1
    



    圖片正確顯示~

    至此,靜態文件部署算是完成了

    Uwsgi安裝及配置

    接下來我們需要使用Uwsgi來處理項目中的動態請求

    基本配置

    虛擬環境下運行

    pip install uwsgi

    在之前創建的config文件夾下新建一個hello.py用來做測試,寫入以下內容

    # test.py
    def application(env, start_response):
     start_response('200 OK', [('Content-Type','text/html')])
     return [b"Hello World"] # python3
     #return ["Hello World"] # python2
    1
    2
    3
    4
    5
    

    接下來運行

    uwsgi --http :8001 --wsgi-file test.py

    打開瀏覽器查看


    出現上圖,說明Uwsgi已經初步運行成功

    運行項目

    上述步驟沒有出問題的話,我們就可以使用Uwsgi啟動項目了,項目根目錄下運行

    uwsgi --http :8001 --module mysite.wsgi

    其中mysite.wsgi(mysite替換成自己的項目名稱)會自動搜索項目中的wsgi.py文件

    如果正常運行~恭喜

    如果瀏覽器出現Internal Server Error

    1. 檢查命令提示符是否輸入正確
    2. 檢查是否項目根目錄下運行
    3. 其他情況,查看命令行輸出或者log

    至此Uwsgi基本配置算是完成了~~

    Nginx + Uwsgi + django

    Nginx訪問hello.py

    現在我們使用socket通信來通過Nginx訪問hello.py,(確保Nginx已經啟動)config文件夾下運行

    uwsgi --socket :8001 --wsgi-file hello.py

    好了,就這么現在訪問瀏覽器

    xx.xx.xxx.xxx:8000


    成功訪問~

    其中8000是Nginx監聽的端口(mysite_nginx.conf文件中配置),–socket :8001是用于socket通信的端口(兩個端口都可以替換~)

    使用Unix sockets替換端口

    編輯mysite_nginx.conf文件,將原來內容修改成如下

    server unix:///path/to/your/mysite/mysite.sock; # for a file socket
    # server 127.0.0.1:8001; # for a web port socket (we'll use this first)
    1
    2
    

    保存后,config文件夾下運行

    uwsgi --socket mysite.sock --wsgi-file hello.py

    依舊打開瀏覽器訪問xx.xx.xxx.xxx:8000,屏幕出現hello world,說明一切正常

    如果出現502 Bad Getway

    查看你的Nginx error log(/var/log/nginx/error.log)

    如果出現

    connect() to unix:///path/to/your/mysite/mysite.sock failed (13: Permission
    denied)
    1
    2
    

    則說明是權限問題,運行

    uwsgi --socket mysite.sock --wsgi-file hello.py --chmod-socket=666

    或者

    uwsgi --socket mysite.sock --wsgi-file hello.py --chmod-socket=664 (推薦,但是我用了沒成功)

    log如果打印了其他問題,請仔細檢查配置~

    使用Nginx + Uwsgi運行項目

    uwsgi --socket mysite.sock --module mysite.wsgi --chmod-socket=664
    1
    

    注意這里有個小坑,mysite_nginx.conf中我配置的mysite.sock在config文件夾下,而這條命令需要在項目根目錄下運行,這里可以:

    1. 修改mysite_nginx.conf下sock文件路徑到根目錄下
    2. 使用配置文件啟動(推薦)
    編輯配置文件

    config文件夾下新建mysite_uwsgi.ini,輸入以下內容

    # mysite_uwsgi.ini file
    [uwsgi]
    # Django-related settings
    # the base directory (full path)
    chdir=/path/to/your/project
    # Django's wsgi file
    module=project.wsgi
    # the virtualenv (full path)
    home=/path/to/virtualenv
    # process-related settings
    # master
    master=true
    # maximum number of worker processes
    processes=10
    # the socket (use the full path to be safe
    socket=/path/to/your/project/mysite.sock
    # ... with appropriate permissions - may be needed
    chmod-socket=666
    # clear environment on exit
    vacuum=true
    stats=%(chdir)/config/uwsgi.status 
    pidfile=%(chdir)/config/uwsgi.pid
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    

    用自己的路徑替換其中對應的配置~

    保存后,運行(確保在mysite_uwsgi.ini目錄下)

    uwsgi --ini mysite_uwsgi.ini

    打開瀏覽器訪問xx.xx.xxx.xxx:8000

    項目這時候應該完美運行了~~

    大功告成~:)

    最后

    重新一步一步的部署了一遍之后,強迫癥終于舒服了~~文章中還是有很多地方不(沒)夠(有)完(寫)善(全),后面有時間繼續補一補~:)

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有