建立一個自己的 Linux系統

月清風華發表於2023-10-29

簡單來說就是一個檔案傳遞的機制,首先建立/安裝一個硬碟,然後把前硬碟中的一部分檔案先轉移到Linux系統上,再透過Linux系統轉移到建立的新硬碟,之後用虛擬機器,把新硬碟裝在其中,就可以在新硬碟上做到一些功能了

前知識準備:

Linux啟動流程:
1、首先Linux要透過自檢,檢查硬體裝置有沒有故障
2、如果有多塊啟動盤的話,需要在BIOS中選擇啟動磁碟
3、啟動MBR(主開機記錄)中的bootloader載入程式
4、載入核心檔案
5、執行所有程式的父程式、老祖宗systemd
6、歡迎介面
在Linux的啟動流程中,載入核心檔案時關鍵檔案:(1)kernel檔案:vmlinuz-3.10.0-957.el7.x86_64 (2)initrd檔案:initramfs-3.10.0-957.el7.x86_64.img(這裡的img不是指的影像...)
 
 什麼是grub:
開源的多作業系統引導載入程式。它通常用於在啟動計算機時選擇並載入作業系統。

當計算機啟動時,GRUB 提供一個選單,顯示可用的作業系統和核心。使用者可以選擇要啟動的作業系統或核心。
多作業系統支援:GRUB 可以引導載入多個作業系統,使使用者能夠在同一臺計算機上安裝和使用多個作業系統。

 (說白了就是這個)

什麼是selinux:security enhance Linux,安全增強型Linux,由美國國家安全域性(NSA)開發的開源專案,透過在核心層面引入安全策略和標籤,限制程式的訪問和許可權
 
區分bash和vim:
bash是一個命令列直譯器,vim是一個文字編輯器,即bash是輸入指令和作業系統進行互動,而vim是自己編譯程式碼進行運作

1.新增磁碟

 注意,這裡選擇的是將虛擬磁碟儲存為單個檔案

初始選擇的路徑是download資料夾,但是download資料夾是應用安裝資料夾,不能用來儲存檔案,於是就換一個資料夾儲存就行了

 

2.進行磁碟分割槽,格式化

使用fdisk /dev/sdb 將dev檔案目錄下面的sdb進行格式化

我們將其第一塊扇區劃分500M,作為引導boot分割槽

分割槽結束後會有此效果

 

之後進行檔案系統建立mkfs.ext4 /dev/sdb1  mkfs.ext4 /dev/sdb2(注意mkfs和.ext4之間沒有空格)

 

3.對磁碟掛載

為什麼要掛載到mnt下面呢:因為mnt是臨時掛載別的檔案系統的一個目錄

mkdir -p /mnt/boot /mnt/sysroot (建立多級目錄,同時在boot和/之間存在一個_表示同時建立兩個)

mount /dev/sdb1 /mnt/boot  mount /dev/sdb2 /mnt/sysroot (把sdb1掛載到boot分割槽,把sdb2掛載到sysroot分割槽)

grub2-install --root-directory=/mnt /dev/sdb (將GRUB2引導載入程式安裝到/dev/sdb裝置,並指定/mnt為根目錄[--root-directory=/mnt])

hexdump -C -n 512 /dev/sdb (以字元和16進位制的形式顯示/dev/sdb前512位元組的內容

 

你也可以用hexdump -d -n 256 /dev/sdb(以十進位制顯示/dev/sdb前256位元組的內容)

 

之後就可以進行復制,把檔案複製到相應位置

cp -rf /boot/* /mnt/boot/

 出現了這樣的情況.... 說明在mnt目錄下面有相關的相同檔案,一個個yes掉需要很久:(   (建立的時候自帶的檔案,不是後來加的)

於是可以rm -rf /mnt/boot/*  (一定小心不要寫成/boot/*)

再進行cp操作

 之後就到了修改grub的部分了

透過cd /mnt/boot(之前把boot cp到其中了)

cd grub2

vim grub.cfg

 就會看到這個介面

在if最後面有該分割槽的uuid,由於是copy過來的,所以uuid會和我們新建立的不同,我們要把它修改成我們新磁碟的uuid

那麼怎麼檢視uuid(universally unique ID)呢

我們可以用指令lsblk -f

 把本來的改成新建立的就可以了

具體要修改的地方如下

 

 在if和else後面加的是sdb1的(表示boot的uuid),在下面的uuid中加的是sdb2的(表示/的uuid),以及在該段的末尾加上selinux=0 init=/bin/bash

selinux=0:這個引數用於禁用 SELinux,即安全增強型 Linux(Security-Enhanced Linux)子系統。SELinux 是一種安全機制,可以提

供強制訪問控制和強制安全策略,透過限制程式的許可權來增強系統的安全性。將 selinux=0 設定為 0 可以臨時禁用 SELinux。

init=/bin/bash:這個引數用於指定系統初始化程式(init)啟動時要執行的程式。/bin/bash 是一個常見的命令直譯器(shell)路徑,它

可以作為一個簡單的、互動式的環境提供給使用者進行命令列操作。透過將 init 設定為 /bin/bash,系統將在引導時直接進入互動式的 Bash shell

,而不是正常的啟動過程。

這樣的地方有三處,都要進行修改.這樣,我們的開機啟動就做好了,開機的時候就會進入磁碟2

 

copy指令

雖然我們可以正常開機,但是裡面的指令我一個也用不了,所以要去copy一些指令

首先建立好目錄

 我們以lib64下的指令為例

 這裡使用的lib64/*.*是一個萬用字元,直接copy的xx.xx的檔案,如果你想把目錄也copy過去,可以考慮使用lib64/*

同時別忘了copy /bin/bash 不然在前面的init=/bin/bash就起不到效果,進都進不去

 

建立一個新的虛擬機器

移除自帶的硬碟,同時加上之前新增的新硬碟

 

現有磁碟檔案地址可以在你的大Linux上找到sdb的地址

 儲存,啟動這樣一個有你自己需求的Linux就做好了

 

這樣有一個問題,就是兩個虛擬機器無法同時開啟

另一個程式已經鎖定檔案的一部分

 這是因為防止多臺虛擬機器同時訪問一個磁碟,而在虛擬機器檔案中新增了一個.lck檔案

沒什麼解決方法....,因為刪除.lck檔案之後又會重新載入一個:(

 

  --- 本文是對韓順平老師的Linux教程127的整理,看到該影片也想自己試試

 

 

相關文章