Linux學(xué)習(xí)-70-啟動引導(dǎo)程序(GRUB)加載內(nèi)核的過程-創(chuàng)新互聯(lián)

16.8 啟動引導(dǎo)程序(GRUB)加載內(nèi)核的過程
  • 啟動引導(dǎo)程序(Boot Loader,也就是 GRUB)會在啟動過程中加載內(nèi)核,之后內(nèi)核才能取代 BIOS 接管啟動過程。如果沒有啟動引導(dǎo)程序,那么內(nèi)核是不能被加載的。在 CentOS 6.x 中,啟動引導(dǎo)程序默認(rèn)是 GRUB,GRUB 是現(xiàn)在最為流行的啟動引導(dǎo)程序,我們也用 GRUB 來說明啟動引導(dǎo)程序的作用, initramfs 這個(gè)虛擬文件系統(tǒng)也是要靠啟動引導(dǎo)程序調(diào)用的。

    成都創(chuàng)新互聯(lián)公司是一家朝氣蓬勃的網(wǎng)站建設(shè)公司。公司專注于為企業(yè)提供信息化建設(shè)解決方案。從事網(wǎng)站開發(fā),網(wǎng)站制作,網(wǎng)站設(shè)計(jì),網(wǎng)站模板,微信公眾號開發(fā),軟件開發(fā),小程序設(shè)計(jì),十年建站對自上料攪拌車等多個(gè)行業(yè),擁有多年的網(wǎng)站制作經(jīng)驗(yàn)。
  • 早期的 LILO 引導(dǎo)程序已經(jīng)不是很常見了,GRUB 相比來講有很多優(yōu)勢,主要有:

    • 支持更多的文件系統(tǒng)。
    • GRUB 的主程序可以直接在文件系統(tǒng)中查找內(nèi)核文件。
    • 在系統(tǒng)啟動時(shí),可以利用 GRUB 的交互界面編輯和修改啟動選項(xiàng)。
    • 可以動態(tài)修改 GRUB 的配置文件,這樣在修改配置文件之后不需要重新安裝 GRUB,而只需重新啟動就可以生效。
  • GRUB加載內(nèi)核的過程:GRUB 的作用有以下幾個(gè):

    • 加載操作系統(tǒng)的內(nèi)核;
    • 擁有一個(gè)可以讓用戶選擇的的菜單,來選擇到底啟動哪個(gè)系統(tǒng);
    • 可以調(diào)用其他的啟動引導(dǎo)程序,來實(shí)現(xiàn)多系統(tǒng)引導(dǎo)。
  • 按照啟動流程,BIOS 在自檢完成后,會到第一個(gè)啟動設(shè)備的 MBR 中讀取 GRUB。在 MBR 中用來放置啟動引導(dǎo)程序的空間只有 446 Byte,那么 GRUB 可以放到這里嗎?答案是空間不夠,GRUB 的功能非常強(qiáng)大,MBR空間是不夠使用的。那么 Linux 的解決辦法是把 GRUB 的程序分成了三個(gè)階段來執(zhí)行。

stage1:執(zhí)行GRUB主程序

第一階段是用來執(zhí)行 GRUB 主程序的,這個(gè)主程序必須放在啟動區(qū)中(也就是 MBR 或者引導(dǎo)扇區(qū)中)。但是 MBR 太小了,所以只能安裝 GRUB 的最小的主程序,而不能安裝 GRUB 的相關(guān)配置文件。這個(gè)主程序主要是用來啟動 Stage 1.5 和 Stage 2 的。

stage1.5:識別不同的文件系統(tǒng)

Stage 2 比較大,只能放在文件系統(tǒng)中(分區(qū)),但是 Stage 1 不能識別不同的文件系統(tǒng),所以不能直接加載 Stage 2。這時(shí)需要先加載 Stage 1.5,由 Stage 1.5 來加載不同文件系統(tǒng)中的 Stage 2。 Stage 1.5 不是放在文件系統(tǒng)中的嗎?如果是,那么 Stage 1 同樣不能找到 Stage 1.5。其實(shí),Stage 1.5 沒有放在文件系統(tǒng)中,而是在安裝 GRUB 時(shí),直接安裝到緊跟 MBR 之后的 32KB 的空間中,這段硬盤空間是空白無用的,而且是沒有文件系統(tǒng)的,所以 Stage 1 可以直接讀取 Stage 1.5。讀取了 Stage 1.5 就能識別不同的文件系統(tǒng),才能加載 Stage 2。

stage2:加載GRUB的配置文件

Stage 2 階段主要就是加載 GRUB 的配置文件 /boot/grub/grub.conf,然后根據(jù)配置文件中的定義,加載內(nèi)核和虛擬文件系統(tǒng)。接下來內(nèi)核就可以接管啟動過程,繼續(xù)自檢與加載硬件模塊了。

16.9 /boot/grub/目錄分析
  • BIOS 在進(jìn)行完成系統(tǒng)檢測之后,就會找到第一個(gè)可以啟動的設(shè)備,并讀取該設(shè)備的 MBR(主引導(dǎo)記錄)以及加載 MBR 中的 boot loader(啟動引導(dǎo)程序),這個(gè)啟動引導(dǎo)程序可以具有菜單功能、直接加載核心文件以及控制權(quán)移交的功能等。系統(tǒng)必須要借助啟動引導(dǎo)程序,才能加載內(nèi)核,那么問題來了,MBR 只是占據(jù)整個(gè)設(shè)備的第一個(gè)扇區(qū)中,其大小也就只有 446 字節(jié)而已,但啟動引導(dǎo)程序功能這么強(qiáng)大,光程序代碼即配置數(shù)據(jù)就肯定不止 446 字節(jié),是怎么安裝的嗎?

  • 是這樣的,Linux 系統(tǒng)將啟動引導(dǎo)程序的程序代碼運(yùn)行與配置數(shù)據(jù)加載分為以下 2 個(gè)階段:

    1. 第一個(gè)階段負(fù)責(zé)運(yùn)行啟動引導(dǎo)的主程序,該主程序必須要被安裝在啟動區(qū),或者是 MBR,或者是引導(dǎo)扇區(qū),但我們說過,MBR 的容量實(shí)在太小,因此,MBR 或引導(dǎo)扇區(qū)通常只安裝啟動引導(dǎo)程序的最小主程序,并不安裝相關(guān)的配置數(shù)據(jù);
    2. 第二個(gè)階段是為主程序加載配置文件,包括相關(guān)的環(huán)境參數(shù)文件(文件系統(tǒng)定義以及主要配置文件 menu.1st);
  • 其中,與 GRUB(啟動引導(dǎo)程序)相關(guān)的配置文件,都放置在 /boot/grub 目錄中。我們來看看這個(gè)目錄下到底有哪些文件。

[root@CncLucZK ~]# ll /boot/grub2
total 32
#GRUB中硬盤的設(shè)備文件名與系統(tǒng)的設(shè)備文件名的對應(yīng)文件
-rw-r--r--. 1 root root    64 Nov 26  2019 device.map
#ext2/ext3文件系統(tǒng)的Stage 1.5文件
-rw-r--r--. 1 root root 14K 4月 10 21:49 e2fs_stage1_5 
#FAT文件系統(tǒng)的Stage 1文件
-rw-r--r--. 1 root root 13K 4月 10 21:49 fat_stage1_5
#FFS文件系統(tǒng)的Stage 1.5文件
-rw-r--r--. 1 root root 12K 4月 10 21:49 ffs_stage1_5

drwxr-xr-x. 2 root root  4096 Nov 26  2019 fonts
#GRUB的配置文件
-rw-r--r--. 1 root root  4630 Mar  9  2020 grub.cfg
-rw-r--r--. 1 root root  1024 Nov 26  2019 grubenv
drwxr-xr-x. 2 root root 12288 Nov 26  2019 i386-pc
#iso9660文件系統(tǒng)的Stage 1.5文件
-rw-r--r--. 1 root root 12K 4 月 10 21:49 iso9660_stage1_5
#JFS文件系統(tǒng)的Stage 1.5文件
-rw-r--r--. 1 root root 13K 4月 10 21:49 jfs_stage1_5
#GRUB的配置文件。和grub.conf是軟鏈接,所以兩個(gè)文件修改哪一個(gè)都可以
Irwxrwxrwx. 1 root root 11 4月 10 21:49 menu.lst ->./grub.conf
#MINIX文件系統(tǒng)的Stage 1.5文件
-rw-r--r--. 1 root root 12K 4 月 10 21:49 minix_stage1_5
#ReiserFS文件系統(tǒng)的Stage 1.5文件
-rw-r--r--. 1 root root 15K 4 月 10 21:49 reiserfs_stage1_5
#系統(tǒng)啟動時(shí),GRUB程序的背景圖像
-rw-r--r--. 1 root root 1.4K 11 月 15 2010 splash.xpm.gz
#安裝到引導(dǎo)扇區(qū)中的Stage 1的備份文件
-rw-r--r--. 1 root root 512 4月 10 21:49 stage1
#Stage2的備份文件
-rw-r--r--. 1 raot root 124K 4月 10 21:49 stage2 
#UFS文件系統(tǒng)的Stage 1.
-rw-r--r--. 1 root root 12K 4月 10 21:49 ufs2_stage1_5
#vstafs文件系統(tǒng)的Stage 1.5文件
-rw-r--r--. 1 root root 12K 4 月 10 21:49 vstafs_stage1_5
#XFS文件系統(tǒng)的Stage 1.5文件
-rw-r--r--. 1 root root 14K 4月 10 21:49 xfs_stage1_5
  • 可以看到,這個(gè)目錄中主要就是 GRUB 的配置文件和各種文件系統(tǒng)的 Stage1.5 文件。不過 GRUB 的配置文件有兩個(gè):/boot/grub/grub.conf 和 /boot/grub/menu.lst,這兩個(gè)配置文件是軟鏈接,所以修改哪一個(gè)都可以。
16.10 GRUB磁盤分區(qū)表示法
  • Linux 系統(tǒng)分區(qū)的設(shè)備文件名的命名是有嚴(yán)格規(guī)范的,類似于 /dev/sda1 代表第一塊 SCSI 硬盤的第一個(gè)主分區(qū)。但是在 GRUB 中分區(qū)的表示方法卻完全不同,采用了類似 hd(0,0) 的方式來表示分區(qū)。

  • 其實(shí)也很好理解,其中:

    • hd 代表硬盤,不再區(qū)分是 SCSI 接口硬盤,還是 IDE 接口硬盤,都用 hd 代表;
    • 第一個(gè) 0 代表 Linux 系統(tǒng)查找到的第一塊硬盤,第二塊硬盤為 2,以此類推;
    • 第二個(gè) 0 代表這塊硬盤的第一個(gè)分區(qū),以此類推;
  • 也就是說,hd(0,0) 代表的是第一塊硬盤的第一個(gè)分區(qū),和 Linux 系統(tǒng)中 /dev/sda1 的含義類似,只是不再區(qū)分是 SCSI 硬盤還是 IDE 硬盤。我們說明一下 Linux 系統(tǒng)對分區(qū)的描述和 GRUB 中對硬盤的描述。

硬 盤分 區(qū)Linux中的設(shè)備文件名GRUB中的設(shè)備文件名
第一塊 SCSI 硬盤第一個(gè)主分區(qū)/dev/sda1hd(0,0)
第二個(gè)主分區(qū)/dev/sda2hd(0,1)hd(0,1)
擴(kuò)展分區(qū)/dev/sda3hd(0,2)hd(0,2)
第一個(gè)邏輯分區(qū)/dev/sda5hd(0,4)hd(0,4)
第二塊 SCSI 硬盤第一個(gè)主分區(qū)/dev/sdb1hd(1,0)
第二個(gè)主分區(qū)/dev/sdb2hd(1,1)hd(1,1)
擴(kuò)展分區(qū)/dev/sdb3hd(1,2)hd(1,2)
第一個(gè)邏輯分區(qū)/dev/sdb5hd(1,4)hd(1,4)
  • 在這張表中要注意,邏輯分區(qū)不能占用主分區(qū)與擴(kuò)展分區(qū)的分區(qū)號,所以第一個(gè)邏輯分區(qū)在 Linux 系統(tǒng)中應(yīng)該用 /dev/sda5 表示,在 GRUB 中應(yīng)該用 hd(0,4) 表示,還要注意 GRUB 的表示方式只在 GRUB 的配置文件中生效,一旦離開了 GRUB 的配置文件,就要使用 Linux 中的設(shè)備文件名來表示分區(qū)了。
16.11 /boot/grub/grub.conf(GRUB配置文件)內(nèi)容
  • 看看 GRUB 的配置文件 /boot/gmb/grub.conf 中到底寫了什么。命令如下:
[root@CncLucZK ~]# vi /boot/grub/grub.conf
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
#以上為GRUB的整體設(shè)置
title 
CentOS (2.6.32-279.el6.i686)
root (hdO,0)
kernel /vmlinuz-2.6.32-279.el6.i686 ro root=OOID=b9a7ala8-767f-4a87-8a2b-a535edb362c9 rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel= auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-279.el6.i686.img
  • 這個(gè)文件的內(nèi)容可以分成兩部分:前 4 行為 GRUB 的整體設(shè)置;title 以下 4 行為要啟動的 CentOS 系統(tǒng)的具體配置。這里只安裝了一個(gè)系統(tǒng),如果多系統(tǒng)并存,那么每個(gè)系統(tǒng)都會有類似的 title 行存在(不一定都是 4 行)。

  • 我們先看整體設(shè)置:

    • default=0:默認(rèn)啟動第一個(gè)系統(tǒng)。也就是說,如果在等待時(shí)間結(jié)束后,用戶沒有選擇進(jìn)入哪個(gè)系統(tǒng),那么系統(tǒng)會默認(rèn)進(jìn)入第一個(gè)系統(tǒng)。如果有多系統(tǒng)并存,那么每個(gè)系統(tǒng)都會有自己的 title 字段,如果想要默認(rèn)進(jìn)入第二個(gè)系統(tǒng),這里就可以設(shè)為 default=1。
    • timeout=5:等待時(shí)間,默認(rèn)是 5 秒。也就是在進(jìn)入系統(tǒng)時(shí),如果 5 秒內(nèi)用戶沒有按下任意鍵,那么系統(tǒng)會進(jìn)入 default 字段定義的系統(tǒng)。當(dāng)然,也可以手工修改這個(gè)等待時(shí)間,如果timeout=0,則不會等待直接進(jìn)入系統(tǒng);如果 timeout=-1,則會一直等待用戶輸入,而不會自動進(jìn)入系統(tǒng)。
    • splashimage=(hd0,0)/gnjb/splash.xpm.gz:用來指定 GRUB 啟動時(shí)的背景圖像的保存位置。記得 CentOS 6.x 啟動時(shí)后臺的藍(lán)色圖像吧,就是這個(gè)文件的作用。不過這個(gè)文件具體在哪里呢?我們已經(jīng)說過,hd(0,0) 代表第一塊硬盤的第一個(gè)分區(qū),而系統(tǒng)在安裝時(shí) /boot 分區(qū)就是第一個(gè)分區(qū),所以這個(gè)背景圖像的實(shí)際位置就是 /boot/gmb/splash.xpm.gz。
    • hiddenmenu:隱藏菜單。啟動時(shí)默認(rèn)只能看到讀秒,而不能看到菜單。如果想要看到菜單,則需要按任意鍵。如果注釋了這句話,那么啟動時(shí)就能直接看到菜單了。
  • 再來介紹 CentOS 系統(tǒng)的具體配置:

    1. title CentOS(2.6.32-279.d6.i686):title 就是標(biāo)題的意思,也就是說,在 title 后面寫入的是什么,系統(tǒng)啟動時(shí)在 GRUB 的啟動菜單中看到的就是什么。
    2. root(hd0,0):是指啟動程序的保存分區(qū)。這里要注意,這個(gè) root 并不是管理員。在系統(tǒng)中,/boot 分區(qū)是獨(dú)立劃分的,而且設(shè)備文件名為 /dev/sda1,所以在 GRUB 中就被描述為 hd(0,0)。
    3. kernel /vmlinuz-2.6.32-279.el6.i686 ro root=UUID=b9a7a1a8-767f-4a87-8a2b-a535edb362c9 rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet。其中:
      • /vmlinuz-2.6.32-279.el6.i686:指定了內(nèi)核文件的位置,這里的 / 是指 boot 分區(qū)。
      • ro:啟動時(shí)以只讀方式掛載根文件系統(tǒng),這是為了不讓啟動過程影響磁盤內(nèi)的文件系統(tǒng)。
      • root=UUID=b9a7a1 a8-767f-4a87-8a2b-a535edb362c9:指定根文件系統(tǒng)的所在位置。這里和以前的Linux版本不太一樣了,不再通過分區(qū)的設(shè)備文件名或卷標(biāo)號來指定,而是通過分區(qū)的 UUID 來指定的。
  • 査詢分區(qū)的 UUID 最簡單的辦法就查詢 /ec/fstab 文件。命令如下:

[root@CncLucZK ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Tue Nov 26 02:11:36 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
UUID=b9a7a1a8-767f-4a87-8a2b-a535edb362c9 	/ ext4 defaults 1 1
/www/swap    swap    swap    defaults    0 0

可以看到"/“分區(qū)的 UUID 和 kernel 行中的 UUID 是匹配的。注意一下 grep 后的”/“,在”/"后是有空格的。

  • 以下禁用都只是在啟動過程中禁用,是為了加速系統(tǒng)啟動的:

    1. rd_NO_LUKS:禁用 LUKS,LUKS 用于給磁盤加密。
    2. rd_NO_MD:禁用軟 RAID。
    3. rd_NO_DM:禁用硬 RAID。
    4. rd_NO_LVM:禁用 LVM。
  • 除了以上這樣,命令輸出信息中還包含以下內(nèi)容:

    1. KEYBOARDTYPE=pc KEYTABLE=us:鍵盤類型。
    2. crashkernel=auto:自動為crashkernel預(yù)留內(nèi)存。
    3. LANG=zh_CN.UTF-8:語言環(huán)境。
    4. rhgb:(redhatgraphics boot)用圖片來代替啟動過程中的文字信息。啟動完成之后可以使用dmesg命令來查看這些文字信息。
    5. quiet:隱藏啟動信息,只顯示重要信息。
    6. initrd/initramfs-2.6.32-279.el6.i686.img:指定了initramfs虛擬文件系統(tǒng)鏡像文件的所在位置。
  • GRUB的配置文件的內(nèi)容就是這樣的,主要是 kernel 行較為復(fù)雜。不過,在這個(gè) /boot/gmb/grub.conf 配置文件中,只啟動了一個(gè) Linux 系統(tǒng)。如果在 Linux 服務(wù)器中 既安裝了 Linux 系統(tǒng),又安裝了 Windows 系統(tǒng),那么 GRUB 的配置文件又是什么樣子的呢?

16.12 多系統(tǒng)并存的GRUB配置文件內(nèi)容分析
  • 每個(gè)系統(tǒng)都是用 title 字段來表示的,如果在服務(wù)器中又多了一個(gè) Windows 系統(tǒng),那么在 GRUB 的配置文件中只不過就是多了一個(gè) title 字段而已。不過要注意,我們一般建議先安裝 Windows 系統(tǒng),后安裝 Linux 系統(tǒng)。原因是 Windows 系統(tǒng)的啟動引導(dǎo)程序無法把啟動過程轉(zhuǎn)交到 Linux 系統(tǒng)的 GRUB 中,自然就不能啟動 Linux 系統(tǒng)了。如果我們后安裝 Linux 系統(tǒng),GRUB 就會安裝到 MBR 中,覆蓋 Windows 系統(tǒng)的啟動引導(dǎo)程序。而 GRUB 是可以把啟動過程轉(zhuǎn)交到 Windows 系統(tǒng)的啟動引導(dǎo)程序中的,所以 Windows 系統(tǒng)和 Linux 系統(tǒng)都可以順利啟動。

  • 當(dāng)然,如果真的是后安裝 Windows 系統(tǒng),則也可以通過手工再安裝一次 GRUB 來覆蓋 MBR 中的 Windows 系統(tǒng)的啟動引導(dǎo)程序

  • 查看Windows 和 Linux 雙系統(tǒng)并存的 GRUB 的配置文件是什么樣子的。命令如下:

[root@CncLucZK ~]#vi /boot/grub/grub.conf
default:0
timeout=-1
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title WinXp
rootnoverify (hd0,0)

#指定Windows XP的啟動分區(qū)。是第一塊硬盤的第一個(gè)分區(qū)
#rootnoverify是不檢測此分區(qū)的意思
makeactive
#設(shè)定分區(qū)為激活狀態(tài)
chainloader +1
#把啟動過程轉(zhuǎn)交給此分區(qū)的第一個(gè)扇區(qū)

title CentOS (2.6.32-279.el6.i686)
root (hd0,5)
#Linux系統(tǒng)的/boot分區(qū)安裝到了第一塊硬盤的第六個(gè)分區(qū)中
kemel/vmlinuz-2.6.32-279.el6.i686 ro
root=UUID=23e5c9d6-77a8-403a-8c0e2bfeffcab5ef rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet
initrd/initramfs-2.6.32-279.el6.i686.img
  • 配置文件的變化主要是多了 WinXP 這一段。rootnoverify(hd0,0) 字段說明這個(gè)分區(qū)不檢測,同時(shí)標(biāo)稱了 Windows 系統(tǒng)的啟動分區(qū)在第一塊硬盤的第一個(gè)分區(qū)中。也就是 Windows 系統(tǒng)的 C: 盤在第一塊硬盤的第一個(gè)分區(qū)中。chainloader+1 的意思是,GRUB 會把啟動過程轉(zhuǎn)交到位于這個(gè)分區(qū)的第一個(gè)扇區(qū)(啟動扇區(qū))中的引導(dǎo)程序中。
  • 為了實(shí)現(xiàn)多系統(tǒng)啟動,除 MBR 中可以安裝啟動引導(dǎo)程序外,每個(gè)分區(qū)的第一個(gè)扇區(qū)也可以安裝啟動引導(dǎo)程序。在這個(gè)例子中,Windows 系統(tǒng)的啟動引導(dǎo)程序就被安裝到了 C: 盤所在分區(qū)的啟動扇區(qū)中,chainloader+1 就是 GRUB 把啟動過程交給了 Windows 系統(tǒng)的啟動引導(dǎo)程序,所以可以啟動 Windows 系統(tǒng)。

參考文獻(xiàn):
Linux啟動引導(dǎo)程序(GRUB)加載內(nèi)核的過程

下一篇:Linux學(xué)習(xí)-71-GRUB手動安裝方法

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

文章題目:Linux學(xué)習(xí)-70-啟動引導(dǎo)程序(GRUB)加載內(nèi)核的過程-創(chuàng)新互聯(lián)
本文來源:http://www.muchs.cn/article2/ejhic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、外貿(mào)建站、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)網(wǎng)站策劃、動態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)