2019.7.3 出差歸來,開始部署GPU服務(wù)器梦湘,一頓操作下來,安裝成功... ... ,一直運(yùn)行到2019.8.23號(hào)件甥,期間遇到過一些問題捌议,也做過一些記錄,但事情繁雜引有,需要時(shí)發(fā)現(xiàn)以找不到瓣颅,于是,決定簡書上開始記錄之旅譬正!
問題緣由:2019.8.23 下午宫补,準(zhǔn)備運(yùn)行jupyter notebook上的文件檬姥,發(fā)現(xiàn)連接已斷,putty也是連接不上粉怕。
發(fā)現(xiàn)問題:去機(jī)房查看健民,發(fā)現(xiàn)是同時(shí)安裝另一臺(tái)服務(wù)器系統(tǒng)時(shí),不小心碰到了GPU服務(wù)器的電源贫贝。
解決問題:重啟電腦后查看顯卡:
命令:lspci | grep NVIDIA? ? ? ? 【Tip: NVIDIA 需要大寫】
命令:nvidia-smi
自己之前命名安裝好了Nvidia驅(qū)動(dòng)秉犹,怎么現(xiàn)在就報(bào)錯(cuò)了呢?沒有辦法稚晚,關(guān)掉電腦崇堵,下班回家,平復(fù)下心情蜈彼,周六再來弄筑辨!
上網(wǎng)查詢資料后俺驶,發(fā)現(xiàn)可能是由非正常關(guān)機(jī)導(dǎo)致的幸逆,解決方法是只能重裝(恰好可以在熟練一遍)。
開始重裝吧暮现,記錄一下:
目前 顯卡驅(qū)動(dòng) 安裝方式有三種
1还绘、CUDA(.run) 下載以后安裝帶上顯卡驅(qū)動(dòng)
2、顯卡驅(qū)動(dòng) .run文件安裝 (我采用的是這種方式)
3栖袋、集成軟件包安裝(yum等)
接下來介紹第二種安裝方式的卸載方法:
找到 .run 文件拍顷,執(zhí)行以下命令:
命令:sh NVIDIA-Linux-x86_64-418.67.run --uninstall
開始安裝:
命令:sh NVIDIA-Linux-x86_64-418.67.run -no-opengl-files
報(bào)錯(cuò)了:
前去機(jī)房塘幅,把在機(jī)房登錄的桌面賬戶(注銷)昔案,仍然出現(xiàn)如上的錯(cuò)誤。
以下轉(zhuǎn)自:http://www.reibang.com/p/36dcf5185f01
圖形界面 X Server的關(guān)閉與啟動(dòng)
Linux圖形界面多數(shù)使用的是X Server电媳,我們優(yōu)勢(shì)需要關(guān)閉/重啟它踏揣。比如:安裝NVIDIA的驅(qū)動(dòng)程序時(shí),就需要先關(guān)閉X server匾乓;希望讓系統(tǒng)以server方式運(yùn)行捞稿,關(guān)閉桌面環(huán)境以降低不必要的性能損耗。
Ubuntu 16.04 管理 x server
1. 用gdm管理
如果 /etc/init.d 下面沒有g(shù)dm的話拼缝,可以嘗試另一種方法
2. 用lightdm管理
3. 用service管理
centos7 管理 x server
所以首先查看下 X server的狀態(tài)
命令:sudo systemctl status gdm.service
命令:sudo systemctl stop gdm.service
再執(zhí)行:
sh NVIDIA-Linux-x86_64-418.67.run?-no-opengl-files
此時(shí)娱局,報(bào)如下錯(cuò)誤:
找到 /usr/lib/modprobe.d/nvidia-installer-disable-nouveau.conf
打開后查看內(nèi)容:
找到? ?/etc/modprobe.d/nvidia-installer-disable-nouveau.conf
兩個(gè)文件同樣的內(nèi)容:
執(zhí)行命令:lsmod | grep nouveau
linux中blacklist.conf解讀
我們?cè)趌inux中安裝驅(qū)動(dòng)衰齐,有時(shí)會(huì)遇到受限或沖突,通常解決方式都是要修改blacklist.conf继阻,那么如何認(rèn)識(shí)和深入了解它呢娇斩?下面就解讀下
一仁卷、blacklist黑名單
對(duì)內(nèi)核模塊來說,黑名單是指禁止某個(gè)模塊裝入的機(jī)制
在 /etc/modprobe.d/中創(chuàng)建.conf文件犬第,使用blacklist關(guān)鍵字屏蔽不需要的模塊锦积。
重新建立 initramfs image文件
## mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
# dracut /boot/initramfs-$(uname -r).img $(uname -r)?
執(zhí)行命令:$(uname -r)
命令:reboot
默認(rèn)進(jìn)入第一個(gè),報(bào)錯(cuò)
第二個(gè)歉嗓,第三個(gè)內(nèi)核可以執(zhí)行成功:
但是丰介,運(yùn)行:lsmod | grep nouveau?
什么是Nouveau?
Nouveau是由第三方為NVIDIA顯卡開發(fā)的一個(gè)開源3D驅(qū)動(dòng)鉴分,也沒能得到NVIDIA的認(rèn)可與支持哮幢。雖然Nouveau Gallium3D在游戲速度上還遠(yuǎn)遠(yuǎn)和NVIDIA官方私有驅(qū)動(dòng)相提并論,不過確讓Linux更容易的應(yīng)對(duì)各種復(fù)雜的NVIDIA顯卡環(huán)境志珍,讓用戶安裝完系統(tǒng)即可進(jìn)入桌面并且有不錯(cuò)的顯示效果橙垢,所以,很多Linux發(fā)行版默認(rèn)集成了Nouveau驅(qū)動(dòng)伦糯,在遇到NVIDIA顯卡時(shí)默認(rèn)安裝柜某。企業(yè)版的Linux更是如此,幾乎所有支持圖形界面的企業(yè)Linux發(fā)行版都將Nouveau收入其中敛纲。
不過對(duì)于個(gè)人桌面用戶來說喂击,處于成長階段的Nouveau并不完美,與企業(yè)版不一樣淤翔,個(gè)人用戶除了想讓正常顯示圖形界面外很多時(shí)候還需要一些3D特效翰绊,Nouveau多數(shù)時(shí)候并不能完成,而用戶在安裝NVIDIA官方私有驅(qū)動(dòng)的時(shí)候Nouveau又成為了障礙旁壮,不干掉Nouveau安裝時(shí)總是報(bào)錯(cuò)监嗜。
nouveau 【百度百科】
這是一個(gè)旨在為nvidia的GPU建立高質(zhì)量的,免費(fèi)自由的開源驅(qū)動(dòng)項(xiàng)目抡谐,nouveau"[nuvo]"與new諧音裁奇,是Linux KMS驅(qū)動(dòng)的一部分,最新的版本在Linux內(nèi)核中支持nvidia的帕斯卡構(gòu)架童叠。
nouveau是一個(gè)自由開放源代碼CPU驅(qū)動(dòng)程序框喳,是為AMD的cpu所編寫,也可用于系統(tǒng)芯片的高通系列厦坛,此驅(qū)動(dòng)程序是由一群獨(dú)立的軟件工程師所編寫五垮,Nvidia的員工也提供了些微的幫助,微軟也提供了很大的幫助杜秸,谷歌也不甘示弱地提供了盡可能多的幫助放仗。
GRUB
GNU GRUB(GRand Unified Booloader簡稱“GRUB”)是一個(gè)來自GNU項(xiàng)目的操作系統(tǒng)啟動(dòng)程序。GRUB是多啟動(dòng)規(guī)范的實(shí)現(xiàn)撬碟,它允許用戶可以在計(jì)算機(jī)內(nèi)榮氏擁有多個(gè)操作系統(tǒng)诞挨,并在計(jì)算機(jī)啟動(dòng)時(shí)選擇希望運(yùn)行的操作系統(tǒng)莉撇。GRUB可用于選擇操作系統(tǒng)分區(qū)上的不同內(nèi)核,也可以用于向這些內(nèi)核傳遞啟動(dòng)參數(shù)惶傻。
GNU GRUB和GRUB是GRand Unified Bootloader的縮寫棍郎,它是一個(gè)多重操作系統(tǒng)啟動(dòng)管理器。用來引導(dǎo)不同系統(tǒng)银室,如windows涂佃,linux。
Initramfs原理和實(shí)踐
Linux系統(tǒng)啟動(dòng)時(shí)使用 initramfs(initram file system), initramfs可以在啟動(dòng)早期提供一個(gè)用戶態(tài)環(huán)境蜈敢,借助它可以完成一些內(nèi)核在啟動(dòng)階段不易完成的工作辜荠。當(dāng)然 initramfs 是可選的,Linux中的內(nèi)核編譯選項(xiàng)默認(rèn)開啟initrd抓狭。
initramfs包含引導(dǎo)所需的所有硬件的內(nèi)核模塊伯病,以及進(jìn)入下一個(gè)引導(dǎo)階段所需的初始腳本。在Centos/RHEL系統(tǒng)上否过,initramfs包含一個(gè)完整的操作系統(tǒng)(可用于故障排除)午笛。
偶爾,initramfs鏡像也可能會(huì)被損壞叠纹。如果發(fā)生這種情況季研,則無法將服務(wù)器啟動(dòng)到正常操作模式敞葛。要在引導(dǎo)到救援環(huán)境后修復(fù)initramfs鏡像誉察,可以使用dracut命令。如果不帶參數(shù)使用惹谐,則此命令當(dāng)前加載的內(nèi)核創(chuàng)建新的initramfs持偏。
或者,您可以使用帶有多個(gè)選項(xiàng)的dracut命令為特定內(nèi)核環(huán)境創(chuàng)建initramfs氨肌。還有一個(gè)名為 /etc/dracut.conf的配置文件鸿秆,您可以在重新創(chuàng)建 initramfs時(shí)使用該文件包含特定選項(xiàng)。
initrd(rd-ramdisk)和initramfs(ramfs-ram file systme)之間的區(qū)別
幾年前怎囚,Linux Torvalds有一個(gè)很好的想法:如果Linux的緩存可以像文件系統(tǒng)一樣掛載會(huì)怎么樣卿叽?只是將文件保存在緩存中,永遠(yuǎn)不要?jiǎng)h除它們恳守,直到它們被刪除或系統(tǒng)重新啟動(dòng)考婴,Linux在緩存周圍寫了一個(gè)名為“ramfs”的小包裝器,其他內(nèi)核開發(fā)人員創(chuàng)建了一個(gè)名為“tmpfs”的改進(jìn)版本(它可以將數(shù)據(jù)寫入交換空間催烘,并限制給定安裝點(diǎn)的大小沥阱,以便在消耗之前填滿所有可能的內(nèi)存)。Initramfs是tmpfs的一個(gè)實(shí)例伊群。
本文鏈接:https://blog.csdn.net/fickyou/article/details/51331911
當(dāng)Linux內(nèi)核啟動(dòng)時(shí)考杉,必須找到并執(zhí)行第一個(gè)用戶程序策精,通常是init。用戶程序存放在文件系統(tǒng)崇棠,故Linux必須找到并掛載第一個(gè)文件系統(tǒng)咽袜。
通常,可用的文件系統(tǒng)都列在/etc/fstab枕稀,所以mount可以找到它們酬蹋。但是/etc/fstab本身存在于文件系統(tǒng)中。因此抽莱,這類似雞生蛋蛋生雞的問題范抓。
為解決該問題,內(nèi)核開發(fā)者建立了內(nèi)核命令列表選項(xiàng) root=食铐,用來指定root文件系統(tǒng)存在于那個(gè)設(shè)備上匕垫。
之前root通常位于軟盤和硬盤上的分區(qū)。如今root文件系統(tǒng)可存在于各種不同類型的硬盤中虐呻,如flash等等象泵。同時(shí)root文件系統(tǒng)也可能被進(jìn)行各種形式的壓縮,加密等等斟叼。
如果在內(nèi)核中假如所有這些特殊案例偶惠,可以做到,但是就像用匯編語言寫web軟件朗涩。
解決方法
Linux2.6將一個(gè)小的ram-based initial root filesystem ( initramfs ) 包進(jìn)內(nèi)核忽孽,如果這個(gè)文件系統(tǒng)包含一個(gè)init程序,內(nèi)核將執(zhí)行它谢床。
Ramdisk
是一個(gè)基于ram的block device兄一,是一個(gè)大小固定的內(nèi)存快,可像disk一樣格式化和掛載识腿。Ramdisk像所有的block device一樣出革,它需要一個(gè)文件系統(tǒng)驅(qū)動(dòng)。此外還有一些弊端渡讼,比如如果ramdisk沒有滿骂束,那么它占有的額外內(nèi)存不能被使用;如果滿了成箫,那么不能進(jìn)行擴(kuò)展展箱。
由于caching,ramdisk浪費(fèi)了更多的內(nèi)存伟众。Linux設(shè)計(jì)為緩存所有從block device中讀取或?qū)懭氲奈募湍夸浳雠海瑀amdisk(實(shí)際上也是在內(nèi)存里)和caching一起,浪費(fèi)很多內(nèi)存。
Initrd
Boot loader Init Ram disk縮寫账胧,是一種機(jī)制竞慢,裝載一個(gè)臨時(shí)根文件系統(tǒng)到內(nèi)存中,作為Linux startup process的一部分治泥,為實(shí)際根文件系統(tǒng)的加載做準(zhǔn)備筹煮。
對(duì)于2.4或更早的kernel來說,使用的是該方法居夹。
Ramfs
后續(xù)Linux Torvalds有一個(gè)巧妙的想法:Linux的緩存是否可以被掛載為一個(gè)文件系統(tǒng)败潦,只要保持文件在緩存中,且不將它們清除准脂,直到它們被刪除或系統(tǒng)重啟劫扒。Linux寫了一個(gè)小段程序?qū)⒕彺姘饋恚Q為ramfs狸膏,其他kernel的開發(fā)者建立一個(gè)加強(qiáng)版稱為tmpfs(它可以寫數(shù)據(jù)到swap沟饥,及限制掛載點(diǎn)的大小)湾戳,initramfs就是tmpfs的一個(gè)實(shí)例贤旷。
Initramfs
Init ramfs縮寫,是一種機(jī)制砾脑,裝載一個(gè)臨時(shí)根文件系統(tǒng)到內(nèi)存中幼驶,作為Linux startup process的一部分,為實(shí)際根文件系統(tǒng)的加載做準(zhǔn)備韧衣。
比較:
(1)initrd通常是一個(gè)單獨(dú)的文件盅藻,initramfs通常和linux kernel映像在一起。
(2)Initrd進(jìn)行了gzip壓縮汹族,有文件系統(tǒng)格式萧求,比如ext2其兴,需要kernel包含對(duì)于的驅(qū)動(dòng)顶瞒。然而initramfs是一個(gè)gzip cpio壓縮,類似tar不過更簡單元旬。內(nèi)核的cpio提取代碼非常小榴徐。
(3) Initrd中的init會(huì)做一些設(shè)置,然后返回到kernel匀归。Initramfs中init不會(huì)返回到kernel坑资,它可能通過exec轉(zhuǎn)到其他根文件系統(tǒng)
(4)當(dāng)轉(zhuǎn)到其他根設(shè)備時(shí),initrd將pivot_root然后umount ramdisk穆端。但是initramfs是rootfs袱贮,即不需要pivot_root,又不需要umount体啰,只需要釋放所有空間攒巍,然后轉(zhuǎn)到其他rootfs即可嗽仪。
(1)?Linux內(nèi)核只人cpio格式的initramfs文件包(因?yàn)閡npack_to_rootfs只能解析cpio格式文件),非cpio格式的initramfs文件包將被系統(tǒng)拋棄柒莉,而initrd可以是cpio包也可以是傳統(tǒng)的鏡像(image)文件闻坚,實(shí)際使用中initrd都是傳統(tǒng)鏡像文件。
(2) initramfs在編譯內(nèi)核的同時(shí)被編譯并與內(nèi)核連接成一個(gè)文件兢孝,它被鏈接到地址_initramfs_start處窿凤,與內(nèi)核同時(shí)被bootloader加載到ram中,而initrd另外單獨(dú)編譯生成的跨蟹,是一個(gè)獨(dú)立的文件雳殊,它由bootloader單獨(dú)加載到ram中內(nèi)核空間外的地址,比如加載的地址為addr(是物理地址而非虛擬地址)窗轩,大小為8MB相种,那么只要在命令行加入“initrd=addr" 8M” 命令,系統(tǒng)就可以找到initrd(當(dāng)然通過適當(dāng)修改Linux的目錄結(jié)構(gòu)品姓,makefile文件和相關(guān)代碼寝并,以上兩種情況都是可以相通的)。
總之腹备,initrd使用了ramdisk衬潦,initramfs使用了ramfs。Initramfs機(jī)制比initrd機(jī)制要優(yōu)越植酥,是一種新的實(shí)現(xiàn)方式镀岛。
cpio基本介紹
cpio是一個(gè)非常古老的歸檔工具。已逐漸被tar替代友驮,但是有些功能是tar不存在的漂羊,所以還是分享下它的用法。
cpio - copy files to and from archives
cpio用于創(chuàng)建卸留、解壓歸檔文件走越,也可以對(duì)歸檔文件進(jìn)行拷入拷出的動(dòng)作,即向歸檔文件中追加文件耻瑟,或從歸檔文件中提取文件旨指。它也支持tar格式的歸檔文件,但是對(duì)壓縮后的tar(如.tar.gz格式)就沒法支持了喳整,cpio畢竟不會(huì)調(diào)用對(duì)應(yīng)的(解)壓縮工具谆构。
cpio一般從標(biāo)準(zhǔn)輸入獲取數(shù)據(jù),寫入到標(biāo)準(zhǔn)輸出框都,所以一般會(huì)結(jié)合管道搬素、輸入重定向、輸出重定向使用。
重新建立 initramfs image文件
## mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
# dracut /boot/initramfs-$(uname -r).img $(uname -r)?
上面是之前的命令熬尺,運(yùn)行后何荚,reboot發(fā)現(xiàn)開機(jī)錯(cuò)誤,原因是# dracut /boot/initramfs-$(uname -r).img $(uname -r) 這個(gè)命令沒有執(zhí)行成功V砗肌2吞痢!或者是 disk-blacklist-nouveau.conf的問題(之前是blacklist.conf)皂吮。
現(xiàn)改為如下流程:
命令:lsmod | grep nouveau
這回終于可以安裝顯卡驅(qū)動(dòng)了戒傻!重復(fù)上面的安裝方法!7涑铩需纳!
命令:nvidia-smi
nvidia-docker run -it -p 8888:8888 --ipc=host -v /home/share:/share ufoym/deepo:all-py36-jupyter jupyter notebook --no-browser --ip=0.0.0.0 --allow-root --NotebookApp.token= --notebook-dir='/share'
運(yùn)行jupyter book文件,terminal上安裝 seaborn:
pip install seaborn
發(fā)現(xiàn)沒有動(dòng)......
執(zhí)行:
systemctl stop firewalld.service
systemctl start smb.service
pip install seaborn 成功
書鐘聲敲艺挪,百煉成鋼