admin管理员组

文章数量:1532161

2023年12月21日发(作者:)

当Linux下换新硬盘遇到4k对齐问题时……

Version: wincent 2012-9-12

From:ACN

作为一IT苦逼穷人,在忍受了自泰国洪水后JS长达一年多的囤货死扛,终在近期价格缓缓暗降后,终于忍无可忍,在一些非柜台的边沿淘家店中直接上门提了一块1T日立笔记本硬盘,给俺的神船本本再扩一下容,释放一下为时已久的空间压力。

因现在新出的硬盘都用了新的所谓高级格式化方式,需要做4k对齐(详情请自己狗狗或摆渡,这里只着重描述过程)。现时神船本本上装的是Centos6.3,按日立官方上的声明,内核版本需在2.6.34以上方能支持4k对齐,如下图:

于是试着再次yum update一下系统,发现升级后的内核仍达不到要求:

# cat /boot/grub/

*********

#boot=/dev/sda

default=0

timeout=5

splashimage=(hd0,0)/boot/grub/

hiddenmenu

title CentOS (6.x86_64)

root (hd0,0)

kernel /boot/6.x86_64 ro root=UUID=f7042228-1174-4327-89b9-76964f62f1a3 rd_NO_LUKS rd_NO_LVM LANG=en_-8 rd_NO_MD

SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM quiet

crashkernel=auto

initrd /boot/6.x86_

title CentOS (6.x86_64)

root (hd0,0)

kernel /boot/6.x86_64 ro root=UUID=f7042228-1174-4327-89b9-76964f62f1a3 rd_NO_LUKS rd_NO_LVM LANG=en_-8 rd_NO_MD

SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM quiet

crashkernel=auto

initrd /boot/6.x86_

title CCLU (6.x86_64)

****************

Update了后的内核还只是6.x86_64,俺的惰性又来了嘿嘿,

不想编译新内核,尝试着用fdisk不加参数分区,分完后用fdisk –l查看:

Disk /dev/sdc: 1000.2 GB, 1 bytes

255 heads, 63 sectors/track, 121601 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes (并非是4k file systems)

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x48123c12

再试着用fdisk –b 4096进行分区,结果出现了类似下面的错误:

Disk /dev/sdc: 1000.2 GB, 1 bytes

255 heads, 63 sectors/track, 15200 cylinders

Units = cylinders of 16065 * 4096 = 65802240 bytes

Sector size (logical/physical): 4096 bytes / 4096 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x48123c12

Device Boot Start End Blocks Id System

/dev/sdc1 1 229 14715284 83 Linux

Partition 1 does not end on cylinder boundary.

/dev/sdc2 229 555 20948760 83 Linux

Partition 2 does not end on cylinder boundary.

/dev/sdc3 555 718 10474380 83 Linux

Partition 3 does not end on cylinder boundary.

/dev/sdc4 718 15200 930613324 5 Extended

/dev/sdc5 719 2024 83923308 83 Linux

/dev/sdc6 2025 15200 846689512 83 Linux

拿来到win7下用日立的AcronisAlignTool查看,全未对齐,并且在win的磁盘管理下分区显示面目全非,真悲剧!后再试着按网上有人说的先用dd if=/dev/zero of=/dev/sdX

bs=4096 count=1 再用fdisk –b 4096 /dev/sdc分区,结果更悲剧了,fdisk –b 4096

/dev/sdc刚一回车,一阵弹钢琴和紧刹车的声音从那小小的硬盘里尖叫出来,吓得俺小心肝嘣嘣直跳,迫不得已直接断电。再不敢尝试,也奉劝各位大大不要轻易尝试这招了,弄不好新买的硬盘还没用上就直接就拿回去送修了。看来不能偷懒,下载新的内核来编译了。

打开/pub/linux/kernel/v2.6/ ,找到最新的内核版本,下载那个最小的压缩格式,懒嘛 :,别看下载的内核才区区60M,解压后就达到487M,编译过程需要的空间更是达到4.2G。俺可怜兮兮紧张的空间一开始没料到需要这么大,结果编译过程中发现空间不够,一删再删……所以一开始就找个足够大的空间,然后用在/usr/src中ln链接过去即可,以下供需要者参考的编译过程记录:

安装新内核:

# mkdir /home/tmp/

把下载的内核放入刚建好的/home/tmp/下:

#xz -dk

#tar –xvf

#cd /usr/src/

# ln -s /home/tmp/linux-2.6.39.4 linux-2.6.39.4

#cd linux-2.6.39.4

# make mrproper

懒招又来了,cp当前系统配置,不用自己详细make menuconfig晕到爆

#cp /boot/6.x86_64 .config (如果没有更新到这一内核,请用别的config文件代替)

# vi .config

# CONFIG_SYSFS_DEPRECATED_V2 is not set

CONFIG_SYSFS_DEPRECATED_V2=y (加上这一条)

# make menuconfig

第一项General setup中选中下列两项:

编译安装内核,这是一个较漫长的过程,要有耐心哦

# make all

# make modules_install

# make install

完成修改启动菜单,让系统从新内核启动:

#vi /boot/grub/

******************************

#boot=/dev/sda

default=0 (改为0)

timeout=5

splashimage=(hd0,0)/boot/grub/

hiddenmenu

title CentOS (2.6.39.4)

root (hd0,0)

kernel /boot/vmlinuz-2.6.39.4 ro root=UUID=f7042228-1174-4327-89b9-76964f62f1a3 rd_NO_LUKS

rd_NO_LVM LANG=en_-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc

KEYTABLE=us rd_NO_DM quiet crashkernel=auto

initrd /boot/

title CentOS (6.x86_64)

root (hd0,0)

************************************

启动后重新用我没有再用linux下的fdisk来分区,因为考虑到我最终还是需要一个windows的分区,还是win下分来得方便并且可能兼容性更好,目前日立提供的工具似乎也只有win下的,就先在win7下分好了,因为 win7本身就支持4k对齐了。其它分区回到linux下用fdisk 改了分区标志转成了linux分区,然后用4建立文件系统,最终fdisk –l时:

Disk /dev/sdb: 1000.2 GB, 1 bytes

255 heads, 63 sectors/track, 121601 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 4096 bytes (已是4k file systems)

I/O size (minimum/optimal): 4096 bytes / 4096 bytes

Disk identifier: 0x48123c12

Device Boot Start End Blocks Id System

/dev/sdb1 1 2612 20976640 83 Linux

/dev/sdb2 * 2612 5224 20980736 82 Linux swap / Solaris

/dev/sdb3 5224 121602 934801408 f W95 Ext'd (LBA)

/dev/sdb5 5224 16974 94376960 83 Linux

/dev/sdb6 16974 121602 840422400 83 Linux

用win7下的工具检查,发现也全部对齐,至此正常使用了!

本文标签: 内核分区硬盘编译过程