日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
記一次被Multipath坑苦的經(jīng)歷

本文轉(zhuǎn)載自微信公眾號(hào)「int32bit」,作者int32bit 。轉(zhuǎn)載本文請(qǐng)聯(lián)系int32bit公眾號(hào)。

10多年的修武網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都營(yíng)銷(xiāo)網(wǎng)站建設(shè)的優(yōu)勢(shì)是能夠根據(jù)用戶(hù)設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整修武建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)建站從事“修武網(wǎng)站設(shè)計(jì)”,“修武網(wǎng)站推廣”以來(lái),每個(gè)客戶(hù)項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

今天使用Packer制作SUSE鏡像,之前磁盤(pán)格式使用的是IDE,這次換成SCSI,由于磁盤(pán)類(lèi)型變了,為了保險(xiǎn)起見(jiàn),我重新生成了initramfs加載ahci驅(qū)動(dòng)以支持在引導(dǎo)階段下加載SATA。

 
 
 
  1. BINARY_DEPS="tail head awk ifconfig cut expr route ping nc wget tftp grep"  
  2. DRACUT_DRIVERS="virtio virtio_net virtio_blk"  
  3. dracut -f -N \ 
  4.      --install "$BINARY_DEPS" \ 
  5.      --kernel-cmdline "rd.shell rd.driver.pre=ahci" \ 
  6.      --kver "$(uname -r)" \ 
  7.      --add-drivers "$DRACUT_DRIVERS" \ 
  8.      --add lvm \ 
  9.      --mdadmconf \ 
  10.      --lvmconf \ 
  11.      -o "dash plymouth" \ 
  12.      initrd-$(uname -r) 

至于為什么需要加載lvm模塊,這是環(huán)境要求根文件系統(tǒng)必須做LVM,在云環(huán)境下其實(shí)我是非常不推薦使用的。

fstab全部使用塊設(shè)備UUID而非邏輯卷路徑(/dev/sdX),擔(dān)心邏輯卷路徑由于磁盤(pán)驅(qū)動(dòng)發(fā)生改變,誰(shuí)知道會(huì)不會(huì)由/dev/sda1變成/dev/vda1呢。

當(dāng)時(shí)想到這么做一定萬(wàn)無(wú)一失了吧,啟動(dòng)虛擬機(jī)驗(yàn)證下,結(jié)果出人意外,系統(tǒng)進(jìn)入了emergency模式,幸好我在initramfs中配置了rd.shell,否則就不知道如何進(jìn)入調(diào)試了。

輸入root密碼進(jìn)入bash,發(fā)現(xiàn)原因是/boot沒(méi)有掛載上,嘗試手動(dòng)掛載看看啥錯(cuò)誤:

 
 
 
  1. mount -a #重新安裝fstab掛載卷 

提示設(shè)備already mounted or mount point busy。

mount point掛載點(diǎn)/boot肯定是沒(méi)有被掛載,那肯定就是設(shè)備問(wèn)題,從錯(cuò)誤中提示是該磁盤(pán)設(shè)備已經(jīng)掛載了,但是無(wú)論如何df、lsblk都找不到掛載記錄。

嘗試各種lsof、fuser命令發(fā)現(xiàn)也沒(méi)有任何進(jìn)程占用了該設(shè)備。

那顯然只有一種情況,我猜想這個(gè)設(shè)備被dm(device mapper)映射了。

使用dmsetup查看所有的dm列表,除了LV映射,果然多了很多0QEMU_QEMU_HARDDISK開(kāi)頭的dm設(shè)備:

 
 
 
  1. 0QEMU_QEMU_HARDDISK_bcd82475-9f57-43e6-a-part 

lVM是會(huì)被dm映射的,這沒(méi)有問(wèn)題,但是/boot是一個(gè)物理分區(qū),并沒(méi)有做PV加到任何VG,那是誰(shuí)把這個(gè)設(shè)備dm了呢?

使用dmsetup info查看下線(xiàn)索:

 
 
 
  1. dmsetup info 0QEMU_QEMU_HARDDISK_bcd82475-9f57-43e6-a-part 
  2. Name: 0QEMU_QEMU_HARDDISK_bcd82475-9f57-43e6-a-part 
  3. State: ACTIVE 
  4. Read Ahead: 1024 
  5. Tables present: LIVE 
  6. Major, minor: 254,1 
  7. Number of targets: 1 
  8. UUID: part1-mpath-0QEMU_QEMU_HARDDISK_bcd82475-9f57-43e6-a-part 

其他信息沒(méi)有什么有用,唯獨(dú)看到UUID中包含mpath,猜測(cè)可能就是由于multipath導(dǎo)致的。

使用multipath -l命令查看果然:

 
 
 
  1. size=40G features='0' hwhandler='0' wp=rw 
  2.   policy='service-time 0' prio=0 status=active 
  3.   2:0:0:0 sda 8:0 active undef running 

居然整個(gè)sda都被multipath映射了。

找到原因心想解決思路就明朗了,檢查了multipathd服務(wù)發(fā)現(xiàn)是disabled的,那應(yīng)該開(kāi)機(jī)是沒(méi)有啟動(dòng)multipathd服務(wù)的。

使用lsmod發(fā)現(xiàn)multipath內(nèi)核模塊確實(shí)是加載的,難道是其他依賴(lài)模塊拉起來(lái)的?

為了確定是multipath服務(wù)導(dǎo)致的,運(yùn)行如下命令確保multipath是停止的,并且強(qiáng)制把multipath內(nèi)核模塊加到黑名單列表中。

 
 
 
  1. systemctl disable multipathd 
  2. echo "blacklist multipath" >>/etc/modprobe.d/50-blacklist.conf 

并修改了/etc/multipath.conf配置文件顯式把sda添加到blacklist中。

 
 
 
  1. blacklist { 
  2.     devnode "^(td|hd|vd)[a-z]" 
  3.     devnode "sda" 

重啟虛擬機(jī),結(jié)果還是一樣的問(wèn)題,multipath還是堅(jiān)強(qiáng)地起來(lái)了。

難道真的是其他服務(wù)把multipath啟動(dòng)的,為了排除這種可能,把/usr/lib/systemd/system/multipathd.service挪走了,這下沒(méi)有誰(shuí)能啟動(dòng)這個(gè)服務(wù)了吧。

重啟虛擬機(jī),結(jié)果還是令人意外的一樣,這個(gè)multipath還是起來(lái)了,夠玄乎。

更絕的我把/sbin/multipath以及/sbin/multipathd都挪走刪除了,這讓服務(wù)再無(wú)可能運(yùn)行了吧。

再次重啟虛擬機(jī),讓人懷疑人生的是multipathd服務(wù)像打不死的小強(qiáng)寧死不屈,依然運(yùn)行了。

Google倒是找到有類(lèi)似的問(wèn)題System exit to emergency shell at boot with multipath enabled (SLES12, MPIO)[1],解決方法也無(wú)非是disable multipath服務(wù)或者把設(shè)備添加到multipath blacklist,但根本沒(méi)有效果。

在百思不得解的情況下,突然靈光一現(xiàn),難道是initramfs的問(wèn)題?這個(gè)multipath在initramfs掛載rootfs就已經(jīng)做過(guò)了?

順著這個(gè)思路,唯有重新做initramfs鏡像,并把multipath模塊加到omit黑名單列表中:

 
 
 
  1. dracut -f -N \ 
  2.      ... 
  3.      -o "... multipath" \ 
  4.      ... 

替換原來(lái)的initrd-xxx文件后啟動(dòng)虛擬機(jī),虛擬機(jī)終于神奇地啟動(dòng)成功了。

最后歸根到底原來(lái)是initramfs boot階段加載了multipath模塊,因此在用戶(hù)態(tài)怎么修改禁用multipath都是沒(méi)用的。后來(lái)在SUSE文檔中也找到了相關(guān)說(shuō)明:Always Keep the initrd in Synchronization with the System Configuration[2]。

這個(gè)問(wèn)題整整折騰了兩個(gè)多小時(shí),雖然問(wèn)題很簡(jiǎn)單,花了很多時(shí)間在OS的trace上,萬(wàn)萬(wàn)沒(méi)想到initramfs是問(wèn)題的根源。

參考資料

[1]System exit to emergency shell at boot with multipath enabled (SLES12, MPIO): https://www.suse.com/support/kb/doc/?id=000019607

[2]Always Keep the initrd in Synchronization with the System Configuration: https://documentation.suse.com/sles/15-SP1/html/SLES-all/cha-multipath.html#sec-multipath-planning-initrd


新聞名稱(chēng):記一次被Multipath坑苦的經(jīng)歷
文章URL:http://m.5511xx.com/article/cdhohos.html