国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

Linux下一些故障現象以及解決的相關資源

2020-04-10 20:27:57
字體:
來源:轉載
供稿:網友
獲得中軟linux3.1服務版以及隨后獲得升級補丁光盤在聯想萬全服務器進行安裝,在安裝至分區界面發生“設備無法找到”的錯誤提示,安裝程序異常退出安裝進程。 
  
  

在安裝過程中擊鍵[Ctrl]+[Alt]+F3查看安裝進程日志以及[Ctrl]+[Alt]+[F4]查看系統相關消息,獲得信息為無法尋找正確設備ID號。 
  
  

分析: 
  
  

中軟3.1版本自帶的AIC-78xx并不能很好的支持的SCSI硬盤的驅動。安裝程序在引導時無法在initrd所解壓的程序模塊尋找到正確的驅動與設備ID相對應,因此需要修改升級安裝光盤驅動程序,采用磁盤方式預先加載SCSI AIC78XX驅動。 
  
  

解決辦法: 
  
  

從官方站點獲取Adaptec AIC-78xx的SCSI驅動,并在RH7.2系統環境制作與中軟3.1內核(2.4.18)一致的SCSI驅動。 
  
  

從官方站點(ftp://updates.redhat.com/7.2/en/os/i386)下載新版本的BOOT內核程序,使用NEW_BOOT_KERNEL_RPM和NEW_BOOT_KERNEL_VERSION環境變量定義驅動盤所采用的內核版本。 
  
  

export NEW_BOOT_KERNEL_RPM=”Kernel-BOOT-2.4.18-24.7.x.i386.rpm” 
  
  

export NEW_BOOT_KERNEL_VERSION=”2.4.8-24.7.xBOOT” 
  
臨時性安裝BOOT內核程序,由于只需要修改BOOT內核模塊,因此在驅動盤制作完畢,需要刪除此程序 
  
  

rpm –ivh $NEW_BOOT_KERNEL_RPM 
  

創建制作驅動模塊目錄 
  
  

mkdir /tmp/bootdisk 
  
  

cd /tmp/bootdisk 
  

拷貝RH7.2光盤bootnet.img文件至/tmp/bootdisk目錄,并掛載img文件于對應目錄 
  
  

mkdir /tmp/bootdisk/bootnet_image 
  
  

mkdir /tmp/bootdisk/initrd_image 
  
  
mount –o loop /tmp/bootdisk/bootnet.img /tmp/bootdisk/bootnet_image 

cp /tmp/bootdisk/bootnet_image/initrd.img /tmp/bootdisk/initrd.gz 
  
  

gunzip /tmp/bootdisk/initrd.gz 
  
  

mv /tmp/bootdisk/initrd /tmp/bootdisk/initrd.img 
  
  

mount –o loop /tmp/bootdisk/initrd.img /tmp/bootdisk/initrd_image 

創建臨時initrd映像文件用于升級和增加驅動模塊。最后一個命令用于創建一個BOOT目錄,其包含了initrd內部所有模塊的列表。 
  
  

mkdir /tmp/bootdisk/initrd_tmp 
  
  

cp –a /tmp/bootdisk/initrd_image/* /tmp/bootdisk/initrd_tmp/ 
  
  

cd /tmp/bootdisk/initrd_tmp 
  
  

zcat modules/modules.cgz | cpio -ivd 

由于BOOT內核需要升級,所以驅動模塊也需要升級。假如版本不一致,驅動模塊將不能被裝載。下面多個語句將在initrd_tmp目錄創建包含升級模塊的新BOOT目錄。首先創建一個模塊文件列表,使用文件列表找出新版本驅動模塊,并把其添加到initrd_tmp的BOOT目錄中。 
  
  

mkdir /tmp/bootdisk/initrd_mtp/$NEW_BOOT_KERNEL_VERSION 
  
  

cd /tmp/bootdisk/initrd_tmp 
  
  

OldBootVersion=`zcat modules/modules.cgz | cpio –t | head –l | awk –F / ‘{print $1}’` 
  
  

ModuleList=`ls $OldBootVersion` 
  
  

cd /lib/modules/$NEW_BOOT_KERNEL_VERSION/kernel 
  
  

for ModuleName in $ModuleList do NewModuleName=`find . -name $ModuleName` 
  
  

cp $NewModuleName /tmp/bootdisk/initrd_tmp/$NEW_BOOT_KERNEL_VERSION/ 
  
  

$ModuleName 

done 

增加新SCSI驅動模塊 
  
  

cp /lib/modules/$NEW_BOOT_KERNEL_VERSION/kernel/drivers/scsi/aic7xxx/aic78xx.o 
  
  

/tmp/bootdisk/initrd_tmp/$NEW_BOOT_KERNEL_VERSION 
  
創建新module.cgz以包含所有升級和增加的模塊 
  
  

cd /tmp/bootdisk/initrd_tmp/ 
  
  

find $NEW_BOOT_KERNEL_VERSION | cpio -ov -H crc | gzip -c9 >  
  
  

/tmp/bootdisk/initrd_tmp/modules/modules.cgz 
  
  

cd /tmp/bootdisk 
  
  

rm -rf /tmp/bootdisk/initrd_tmp/*BOOT 
  
為新增加的SCSI驅動模塊定義依賴關系 

echo "aic78xx: scsi_aic78xx" >> /tmp/bootdisk/initrd_tmp/modules/modules.dep 
  

為新增驅動模塊定義模塊信息 

/tmp/bootdisk/initrd_tmp/modules/module-info : 

aic78xx 

{tab}   sisc 

“”””   "Adaptec SCSI aic-78xx" 
  
在/odules/pcitable為增加的設備驅動制作記錄,可使內核根據設備號尋找正確的驅動。可使用stage2文件的記錄進行增加。(使用TAB鍵代替空格) 

cp /tmp/bootdisk/initrd_image/modules/pcitable /tmp/bootdisk/pcitable 
  
grep ""aic78xx"" /tmp/bootdisk/stage2_image/modules/pcitable >> 

/tmp/bootdisk/pcitable 
  
排序pcitable文件并寫入initrd映像文件 

sort /tmp/bootdisk/pcitable > /tmp/bootdisk/initrd_tmp/modules/pcitable 

創建新版initrd映像文件。必須為initrd映像文件預留足夠空間以便在運行期間能成功裝載驅動。這是initrd在引導期間解壓所需要的文件系統空間。 

INITRD_SIZE=`du -k -s /tmp/bootdisk/initrd_tmp | awk '{print $1}'` 

let "NEW_INITRD_SIZE=$INITRD_SIZE + 1000" 

mkdir /tmp/bootdisk/initrd_new_image 

dd if=/dev/zero bs=1k count=$NEW_INITRD_SIZE of=/tmp/bootdisk/initrd_new.img 
  
echo "y" | mke2fs /tmp/bootdisk/initrd_new.img > /dev/null 
  
mount -o loop /tmp/bootdisk/initrd_new.img /tmp/bootdisk/initrd_new_image 
  
cp -a /tmp/bootdisk/initrd_tmp/* /tmp/bootdisk/initrd_new_image/ 

sync 

umount /tmp/bootdisk/initrd_new_image 

umount /tmp/bootdisk/initrd_image 

壓縮initrd映像文件和新版本內核至bootnet映像文件中。 

gzip -9 /tmp/bootdisk/initrd_new.img 
cp /tmp/bootdisk/initrd_new.img.gz /tmp/bootdisk/bootnet_image/initrd.img 

cp /boot/vmlinuz-$NEW_BOOT_KERNEL_VERSION /tmp/bootdisk/bootnet_image/ 

vmlinuz 
  
拷貝映像至磁盤 

dd if=/tmp/bootdisk/bootnet.img of=/dev/fd0 

刪除引導文件 
  
  

rpm –e 
  
  
通過安裝新驅動模塊,解決安裝故障。 
  
遺留問題: 

系統只能安裝于一塊硬盤,當加載多塊硬盤,仍舊提示“設備無法找到”錯誤信息,原因不明,有待進一步查明。 

小結: 
  

通過研究linux引導過程機制,對linux引導裝載驅動有深入了解,并掌握如何定制驅動程序,并在引導時裝載,實現相關設備的驅動。通過制作initrd映像文件掌握驅動加載所必須的模塊依賴文件modelue.dep和模塊設備文件pcitable。 
  
在定制bootnet.img文件,需要考慮給initrd解壓時所必須預留的文件系統空間,而不是磁盤本身的空間。如果bootnet.img本身容量已經超過磁盤容量限制,則必須考慮刪除不必要的驅動模塊以減小映像文件的大小。 
  
此外,對制作的bootnet.img必須采用D9高壓縮比率,可增加可用資源。 
LVS組件安裝 
故障現象: 
  
安裝ipvsadm套件遇到需要Glibc2.3版才可支持組件安裝,否則無法順利安裝。中軟3.1自帶Glibc版本為2.2.3,下載新版glibc-2.3 RPM包進行強行安裝,結果系統出現不穩定,使用RPM進行軟件安裝,系統出現故障性提示:“Cannot handle file ‘libc.so.6’ with TLS data”,軟件無法正常安裝。 
  
分析: 
  
使用GLIBC的RPM軟件強制進行軟件升級,導致RPM本身依賴關系遭到破壞。這是著名的Catch-22問題,即Glibc與RPM軟件包是彼此相互依賴。因此必須對RPM本身進行升級。然而升級Glibc造成系統無法正常運行RPM,因此使用RPM包無法進行升級。經過查閱紅帽官房站點,得知與RPM一同安裝的工具rpm2cpio可以析取rpm包中內容。使用ldconfig配置鏈接路徑,并重新建構rpm數據庫就可升級RPM包,解決Glibc升級問題。 
  
解決: 
  
獲得RPM升級相關軟件包 
  
rpm-4.2-0.68.i386.rpm 
  
rpm-build-4.2-0.68.i386.rpm 
  
rpm-devel-4.2-0.68.i386.rpm 
  
rpm-python-4.2-0.68.i386.rpm 
  
elfutils-0.76-2.i386.rpm 
  
elfutils-devel-0.76-2.i386.rpm 
  
elfutils-libelf-0.76-2.i386.rpm 
  
popt-1.8-0.68.i386.rpm 
  
redhat-rpm-config-8.0.20-1.noarch.rpm 
  
  
使用rpm2cpio工具析取rpm包內容,使用ldconfig配置鏈接時動態庫路徑,并重新編譯rpm數據庫 
  
cd / 
  
sudo rpm2cpio ~/rpmdir/rpm-* ~/rpmdir/elfutils-* | sudo cpio -ivd 
  
sudo rm -f /var/lib/rpm/__db.00* 
  
sudo ldconfig 
  
cd ~/rpmdir 
  
sudo rpm -Uvh *.rpm 
  
sudo rpm -rebuilddb 
  
  
遺留問題: 
  
升級RPM包本身會影響操作系統某些軟件的正常運行,其遭到破壞的依賴關系可以使用軟件升級的辦法進行解決。然而某些軟件本身只支持Glibc2.2,因此升級Glibc2.3版本會導致依賴于Glibc2.2的軟件無法運行,系統將遺留垃圾軟件。解決辦法有待進一步研究。 
  
小結: 
  
通過對系統關鍵性組件包,諸如Glibc和RPM的升級,了解系統對軟件安裝和維護的基礎結構。關于RPM升級時必須考慮elf文件包的升級,因為elf格式為所有unix的文件基準格式、軟件包安裝/升級和維護的文件都必須遵守ELF規范。 
  
此外,使用rpm2cpio對rpm文件內容進行提取后,必須使用ldconfig命令指定編譯鏈接時的動態庫路徑,才能成功實現RPM安裝。 

入侵監測系統配置 
故障現象: 
  
單點snort入侵監測系統,接入百兆交換機后大約每間隔2小時,傳感器就發生系統崩潰。檢查系統日志,發現報警日志數量巨大,日志迅速占據硬盤大量空間。 
  
分析: 
  
整個網絡只提供WEB訪問服務和FTP訪問服務,snort入侵檢測系統默認配置較多無關入侵規則,導致日志中出現大量誤報信息,諸如遠程認證登錄,數據庫遠程訪問等數據導致日志數量增長迅速;此外,入侵監測系統采用華為SB2026交換機,采用端口鏡像方式使交換機所有數據流均復制到監聽端口,導致交換機達到負載承受臨界點,鏡像端口數據交換過量,整個網絡資源無法正常使用。 
  
解決: 
  
根據網絡使使用的具體服務,使用Webmin管理界面定義所監測的入侵規則只包含HTTP和FTP的相關規則,關閉其他入侵規則,提高入侵監測系統判別能力,降低誤報信息。 
  
減少交換機鏡像方式所監測的端口數,只對重要服務器進行端口數據鏡像拷貝,緩解交換機數據交換所承載的負荷,提高網絡資源利用率。 
  
遺留問題: 
  
暫無 
  
小結: 
  
通過研究linux下snort的運行機理與入侵監測規則過濾結構,掌握開源snort下特定入侵規則編寫和動態防御,了解真實網絡環境中入侵監測系統所存在的缺陷和特定的補修方法。 
安全策略配置 
故障現象: 
  
linux服務器正常訪問一段時間后系統運行速度逐漸下降,某些主機使用安全工具進行安全掃描后無法正常訪問服務器。服務器重新啟動后使用安全掃描的主機仍然無法正常訪問。 
  
分析: 
  
查看iptables防火墻列表規則,發現被拒絕訪問主機列表龐大,被拒絕主機永久存在列表規則之中,不會自動刪除,導致系統運行效率降低,并使安全監測主機在發生安全檢測掃描行為之后無法正常訪問系統。 
  
自動防御進程portsentry監測異常數據訪問行為,并與防火墻連動,對發送異常數據流進行隔離,因此iptables列表隔離主機數目隨時間呈線形增長,系統運行效率將逐步降低。 
  
解決: 
  
修改portsentry配置文件KILL_ROUTE參數 
  
KILL_ROUTE="/usr/local/bin/iptables -I INPUT -s $TARGET$ -j DROP" 
  
為: 
  
KILL_ROUTE="/usr/local/bin/ip_chk $TARGET$" 
  
  
  
ip_chk程序如下: 
  
// ip_chk.c 
  
#include 
  
#include 
  
#include 
  
#include 
  
#include 
  
#include 
  
#include 
  
#define IP_LIST_FILE "/tmp/.iplist" 
  
#define IP_DROP_TIMEOUT 2000 
  
#define SEM_ID 250 
  
int line_count(FILE *file){ 
  
int line_count = 0; 
  
char ch; 
  
fseek(file, SEEK_SET, 0); 
  
do{ 
  
  ch = fgetc(file); 
  
  if(ch = 'n'){ 
  
    line_count =+1; 
  
  } 
  
}while(ch = !EOF) 
  
return line_count; 
  

  
boolean is_repeat(char *ip_addr, long fpos_offset, long lpos_offset, File* file){ 
  
char buf[15]; 
  
char ch; 
  
fseek(file, SEEK_SET, 0); 
  
do{ 
  
  ch = fgetc(file); 
  
}while(ftell(file < fpos_offset)) 
  
for(int i = 0; i <= (lpos_offset-fpos_offset); i++){ 
  
  if((buf = fgetc(file)) == " ") 
  
    break; 
  

  
if(strcmp(buf, ip_addr) 
  
  return true 
  
else 
  
  return false; 
  

  
void update(boolean need_update, File* file, char* ip_addr){ 
  
int i = 0; 
  
int count; 
  
int flg; 
  
char buf[4]; 
  
string new_content; 
  
char new_buf[50]; 
  
time_t t; 
  
if(need_update){ 
  
  do{ 
  
    fgetc(file); 
  
  }while(ch != " "); 
  
  flg = (int)ftell(file) + 1; 
  
  do{ 
  
    buf = fgetc(file); 
  
    i++; 
  
  }while(ch != "n"); 
  
  buf[++i] = 'P'; 
  
  count = (int)buf + 1; 
  
  buf = (string)count; 
  
  i = 0; 
  
  fseek(file, 0, flg); 
  
  while(buf != 'P'){ 
  
    fputc(buf, file); 
  
    i++; 
  
  } 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 溧水县| 太白县| 江都市| 喀喇沁旗| 遂溪县| 峨边| 阳春市| 礼泉县| 晴隆县| 安泽县| 浙江省| 黄陵县| 旬邑县| 桐城市| 佳木斯市| 奉贤区| 峨边| 大城县| 资源县| 廊坊市| 邓州市| 镇坪县| 清原| 东至县| 文成县| 宁远县| 乌兰县| 胶州市| 平潭县| 水富县| 天等县| 清水县| 蒲江县| 桑日县| 天峨县| 塘沽区| 江山市| 合川市| 德令哈市| 门头沟区| 卢湾区|