`

利用U盘加载控制器驱动来安装Linux系统

阅读更多
转自:http://hi.baidu.com/kuangxiangjie/blog/item/c399c1cadcceca40f21fe713.html

  一般我们在安装服务器过程中需要加载一些scsi卡或raid卡驱动,以便操作系统可以检测到硬盘。
  常规的安装方式是要用到软驱,其实我们也是可以通过U盘来进行加载的。

  装Linux控制器驱动往往都是*.dd或者*.img结尾的文件,我们都可以在linux下通过dd命令来写入到U盘中,比如驱动的名字为megaraid_sas.img
  假设有一台Linux机器,先把文件拷贝到/tmp,U盘的设备名为sdb。
  dd if=/tmp/megaraid_sas.img of=/dev/sdb

  cat命令也可以实现dd的作用,注意这里是sdb而不是sdb1,是设备而不是分区,如果你把文件写入到sdb1,你可以尝试加载驱动会失败。
  Linux可以写裸设备而windows不可以,也就是说如果U盘在windows下是未分区的(此时windows是无法写的)但是在linux下还是可以写的。
  在 of=/dev/sdb 的时候是从U盘的最开始位置写的,结果把它模拟成了一个软盘,前446Bytes即“boot code”定义了它的类型。此时你把这个U盘拿到windows机器上,在磁盘管理里边可以看到1G的容量,但是右键属性发现容量为1.38,即成了一个 软盘,也可以说是四不像,其实是欺骗了windows。

  这个时候你可以把U盘格式化,然后把megaraid_sas.img在windows下用第三方工具解压后发送到U盘之后,安装系统过程中还是可以正常加载驱动的。
  这是为什么呢?
  因为我们在windows下对这时的U盘操作时,windows会先读取U盘的 “boot code”,认为它是一个软盘,因为软盘是没有分区的概念即没有partition table,把其后边的空间格式化了,简单的说,再怎么样也不会把“boot code”给改了。
  这时再拿到linux下,linux仍可以读出其中的数据,但在用 fdisk -l /dev/sdb 的时候会发现U盘的Partition table有问题,可以在用fdisk /dev/sdb 进入交互界面后用一个命令“w”重新改写,把U盘变成一个没有分区的U盘。

  有很重要的一点补充,现在很多人再买到服务器之后要装linux系统,但是没有linux环境,无法按照上边的步骤来把驱动写到U盘上去,经测试发现可以用redhat的第一张盘来创造这样一个linux环境,假设现在要加载的驱动为LSI sas raid卡的驱动
  步骤如下:
  1、先在windows环境中把驱动拷贝到U盘上去,
  2、用redhat的第一张盘引导,当出现提示你是否加载hard driver时,选择skip,这是OS没有检测到硬盘的提示,此时就可以skip,接着就要加载图形化界面了,这时候我们就可以按CTRL+ALT+F2切换到控制台了,
  (有一点补充,硬盘的驱动是在出现图形化界面之前就已经加载了,对于这个问题我还请了前辈一瓶水,我们可以在出现控制台后切换到F3,F4就可以看到内核和安装的详细过程)
  3、在内存中建两个目录mkdir /a /b
  4、mount /dev/sda1 /a
  5、cp /a/megaraid_sas-rhel40-all.img /b
  6、umount /a
  7、dd if=/b/megaraid_sas-rhel40-all.img of=/dev/sda
  8、再次启动服务器,当出现boot之后输入linux dd,然后按照提示选择从/dev/sda中添加驱动,就会找到硬盘(如果出现多个sdx设备,可以按CTRL+ALT+F4来看到底你的U盘是哪个设备)

  后话:
  因为工作能接触到不同cpu的服务器,发现此种方法在AMD cpu的机器上无法实现,intel的机器没有问题,intel的cpu可以在找不到硬盘的情况下仍然可以加载图形界面,AMD的cpu如果找不到硬盘就 不可以继续,而且即使用dd命令把驱动写到U盘上去,驱动还是不能正常的加载的,也就是说无法用U盘给AMD cpu的机器加载硬盘的驱动。

  Linux在检测不同cpu时反馈的结果差别还是真的很大,不能说是redhat或者AMD的问题

http://blog.chinaitlab.com/html/66/1713566-157973.html

---------

linux下dd命令详解

   名称: dd
使用权限: 所有使用者dd 这个指令在 manual 里的定义是 convert and copy a file

使用方式:
dd [option]


如果你想要在线看 manual, 可以试试:
dd --help

或是
info dd

如果你想要看看这个版本如何:
dd --version

输入或输出
dd if=[STDIN] of=[STDOUT]

强迫输入或输出的Size为多少Bytes
bs: dd -ibs=[BYTE] -obs=[SIZE]

强迫一次只做多少个 Bytes
cbs=BYTES

跳过一段以后才输出
seek=BLOCKS

跳过一段以后才输入
skip=BLOCKS

当然你可以拿这个来方便的拷贝光碟(注意,你的光碟是标准的 iso9660格式才可以这么做唷!)

dd if=/dev/cdrom of=cdrom.iso
其中 if 后面以及 of 后面的内容依你的需求调整。

然后给系统这个指令就可以烧了:

cdrecord -v cdrom.iso
这篇不是在讲 cdrecord 的,所以上面的指令是最为简单但是不一定能符合您的硬件环境...
功 能:把指定的输入文件拷贝到指定的输出文件中,并且在拷贝过程中可以进行格式转换。可以用该命令实现DOS下的diskcopy命令的作用。先用dd命令 把软盘上的数据写成硬盘的一个寄存文件,再把这个寄存文件写入第二张软盘上,完成diskcopy的功能。需要注意的是,应该将硬盘上的寄存文件用rm命 令删除掉。系统默认使用标准输入文件和标准输出文件。

语法:dd [选项]

if =输入文件(或设备名称)。

of =输出文件(或设备名称)。

ibs = bytes 一次读取bytes字节,即读入缓冲区的字节数。

skip = blocks 跳过读入缓冲区开头的ibs*blocks块。

obs = bytes 一次写入bytes字节,即写入缓冲区的字节数。

bs = bytes 同时设置读/写缓冲区的字节数(等于设置ibs和obs)。

cbs = byte 一次转换bytes字节。

count=blocks 只拷贝输入的blocks块。

conv = ASCII 把EBCDIC码转换为ASCIl码。

conv = ebcdic 把ASCIl码转换为EBCDIC码。

conv = ibm 把ASCIl码转换为alternate EBCDIC码。

conv = block 把变动位转换成固定字符。

conv = ublock 把固定位转换成变动位。

conv = ucase 把字母由小写转换为大写。

conv = lcase 把字母由大写转换为小写。

conv = notrunc 不截短输出文件。

conv = swab 交换每一对输入字节。

conv = noerror 出错时不停止处理。

conv = sync 把每个输入记录的大小都调到ibs的大小(用NUL填充)。



例1:要把一张软盘的内容拷贝到另一张软盘上,利用/tmp作为临时存储区。把源盘插入驱动器中,输入下述命令:

$ dd if =/dev/fd0 of = /tmp/tmpfile

拷贝完成后,将源盘从驱动器中取出,把目标盘插入,输入命令:

$ dd if = /tmp/tmpfile of =/dev/fd0

软盘拷贝完成后,应该将临时文件删除:

$ rm /tmp/tmpfile



例2:把net.i这个文件写入软盘中,并设定读/写缓冲区的数目。

(注意:软盘中的内容会被完全覆盖掉)

$ dd if = net.i of = /dev/fd0 bs = 16384



例3:将文件sfile拷贝到文件 dfile中。

$ dd if=sfile of=dfile
_____________________________________
dd 是 Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。

dd 的主要选项:
指定数字的地方若以下列字符结尾乘以相应的数字:
b=512, c=1, k=1024, w=2, xm=number m

if=file
输入文件名,缺省为标准输入。

of=file
输出文件名,缺省为标准输出。

ibs=bytes
一次读入 bytes 个字节(即一个块大小为 bytes 个字节)。

obs=bytes
一次写 bytes 个字节(即一个块大小为 bytes 个字节)。

bs=bytes
同时设置读写块的大小为 bytes ,可代替 ibs 和 obs 。

cbs=bytes
一次转换 bytes 个字节,即转换缓冲区大小。

skip=blocks
从输入文件开头跳过 blocks 个块后再开始复制。

seek=blocks
从输出文件开头跳过 blocks 个块后再开始复制。(通常只有当输出文件是磁盘或磁带时才有效)

count=blocks
仅拷贝 blocks 个块,块大小等于 ibs 指定的字节数。

conv=conversion[,conversion...]
用指定的参数转换文件。

转换参数:

ascii 转换 EBCDIC 为 ASCII。

ebcdic 转换 ASCII 为 EBCDIC。

ibm 转换 ASCII 为 alternate EBCDIC.

block 把每一行转换为长度为 cbs 的记录,不足部分用空格填充。

unblock
使每一行的长度都为 cbs ,不足部分用空格填充。

lcase 把大写字符转换为小写字符。

ucase 把小写字符转换为大写字符。

swab 交换输入的每对字节。 Unlike the
Unix dd, this works when an odd number of
bytes are read. If the input file contains
an odd number of bytes, the last byte is
simply copied (since there is nothing to
swap it with).

noerror
出错时不停止。

notrunc
不截短输出文件。

sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。

由于 dd 命令允许二进制方式读写,所以特别适合在原始物理设备上进行输入/输出。例如可以用下面的命令为软盘建立镜像文件:
dd if=/dev/fd0 of=disk.img bs=1440k
有趣的是,这个镜像文件能被 HD-Copy ,Winimage 等工具软件读出。再如把第一个硬盘的前 512 个字节存为一个文件:
dd if=/dev/hda of=disk.mbr bs=512 count=1
http://www.cnblogs.com/licheng/archive/2008/03/21/1116492.html
分享到:
评论

相关推荐

    linux_usb_driver.rar_LINUX U盘_U盘驱动_linux usb

    当U盘插入Linux系统时,主机控制器驱动识别到新的设备,并通过USB总线向设备发送命令。然后,系统会查找匹配的设备驱动。对于U盘,这个驱动通常属于块设备驱动,因为它存储数据并以块为单位进行读写。 3. **USB...

    linux下的U盘驱动程序

    在Linux操作系统中,U盘驱动程序是连接USB存储设备(如U盘)与系统内核的关键部分。Linux的U盘驱动通常基于通用USB驱动模型,它允许开发者为各种USB设备编写特定的驱动程序。本项目是基于`usb-skeleton.c`源代码文件...

    linux U盘驱动流程分析.pdf

    Linux系统中U盘驱动的识别和加载流程分析: 一、U盘驱动基础介绍 在Linux系统中,U盘作为USB Mass Storage设备的代表,是通过USB协议进行连接和通信的。USB Mass Storage设备类别繁多,包括但不限于USB磁盘、硬盘、...

    曙光I620G10服务器 磁盘驱动程序

    当您在曙光I620G10服务器上安装操作系统,如Windows Server或Linux发行版时,如果没有正确加载磁盘驱动,系统可能无法检测到硬盘,从而无法进行分区和格式化操作。这将导致系统安装过程受阻。为了解决这个问题,你...

    浪潮nf5270m5 安装2012 R2 raid 驱动

    7. **完成安装**:系统安装完成后,首次启动时,确保RAID控制器驱动已经成功加载,你可以通过设备管理器检查驱动状态。 请注意,不同的服务器可能需要不同的RAID控制器驱动,因此在进行此类操作前,务必确认下载的...

    X3250 M4 安装Red Hat Linux 6.3 及DVD启动问题

    - **LSI**:在某些情况下,为了确保 X3250 M4 上的 RAID 控制器能够正常工作,可能需要为 LSI RAID 控制器安装额外的驱动程序。 - **安装驱动**:通常可以在安装过程中手动指定加载 LSI 的驱动程序,或者通过预先...

    10Linux USB 主机控制器和设备驱动1

    在Linux系统中,USB设备的驱动通常包含主机控制器驱动和设备驱动两部分。主机控制器驱动负责与USB控制器交互,管理USB总线,而设备驱动则针对具体设备的功能进行操作。例如,当插入一个USB闪存驱动器时,系统会自动...

    Linux那些事儿之我是U盘

    - **驱动安装**:Linux系统中的U盘驱动通常是作为模块存在的,这意味着它们可以在系统运行时动态加载。当系统检测到新的U盘时,会自动加载相应的驱动模块。 - **模块机制**:Linux内核中的模块机制允许用户在运行时...

    U盘启动盘-键制作工具-USB闪存驱动器控制(USB Flash Drives Control) 4.0.zip

    它允许用户选择ISO镜像文件,这个镜像可以是Windows的安装镜像,也可以是Linux发行版的安装镜像,或者其他支持从USB启动的系统文件。只需简单几步,用户就能将ISO文件写入U盘,制作成启动盘。 制作U盘启动盘的步骤...

    USB设备驱动详解(Linux)

    1. **枚举过程**:当USB设备插入系统后,USB主机控制器会检测到新设备的接入,然后进行设备枚举。这个过程中包括了设备识别、配置选择、接口设置等步骤。 2. **驱动匹配**:Linux内核会根据设备描述符来查找合适的...

    RH5885V3服务器系统安装手册

    在进行RH5885V3服务器的系统安装之前,首要的任务是了解服务器的具体配置信息,并根据《操作系统兼容表》来判断所安装的操作系统是否需要加载特定的驱动程序。例如,在安装Windows Server 2008系统时,根据兼容表...

    嵌入式linux下USB设备自动加载.pdf

    总结来说,嵌入式Linux下USB设备自动加载的关键在于理解Linux驱动程序的工作原理,掌握USB Host的OHCI标准和热插拔机制,编写或调整热插拔脚本,并利用udev规则进行设备管理。通过这些技术,可以实现对USB设备的无缝...

    USB内核过滤驱动

    当USB设备插入系统时,USB控制器会发送设备描述符到主机,这个描述符包含了设备的VID和PID。过滤驱动接收到这些信息后,会对比预设的白名单或黑名单。如果设备的PID和VID匹配白名单中的记录,那么系统会继续加载相应...

    硬盘安装linux centos6.3 构成电脑双系统

    通过“控制面板”或“计算机管理”进入磁盘管理界面,选择一个非系统分区(通常是逻辑驱动器),然后进行压缩操作。确保释放出一段连续的未分配空间,因为Linux系统需要连续的空间来安装。不连续的空间会导致安装...

    centos5.6添加8560m2阵列卡驱动

    在Linux操作系统中,尤其是企业级的CentOS发行版,安装硬件驱动是确保系统能正确识别并充分利用硬件资源的关键步骤。本文将详细介绍如何在CentOS 5.6中为浪潮8560M2阵列卡添加驱动程序。 首先,我们需要了解浪潮...

    嵌入式Linux下用AT91RM9200实现对U盘的操作.pdf

    1. 驱动程序开发:编写针对AT91RM9200的USB主机控制器驱动,处理USB设备的枚举、配置和数据传输。 2. 文件系统支持:集成或实现对FAT文件系统的支持,以便系统能够识别和操作U盘上的文件。 3. 用户空间接口:创建...

    嵌入式Linux下用AT91RM9200实现对U盘的操作

    这些应用程序可以利用操作系统提供的API来访问文件系统,从而实现对U盘的具体操作。 #### 六、总结 本文详细介绍了如何在嵌入式Linux环境下利用AT91RM9200芯片实现对U盘的操作。通过硬件设计和软件开发相结合的...

    linux USB设备驱动开发深度解析-宋宝华

    主机控制器驱动是Linux USB驱动框架中最核心的部分之一,它位于操作系统和物理USB控制器硬件之间,负责协调USB设备的访问。 - **数据结构**: - `struct usb_hcd`:表示一个USB主机控制器。 - `struct hc_driver`...

    一个usb磁盘驱动

    主机控制器驱动是针对特定的USB控制器硬件编写,确保操作系统能够识别并管理USB总线。而USB设备驱动则是针对具体的USB设备,如USB磁盘驱动,负责处理与USB存储设备的数据传输。 在Windows操作系统中,USB磁盘驱动...

Global site tag (gtag.js) - Google Analytics