linux中的硬盤及flash操作


  磁盤操作是塊設備的必備操作,需要認真掌握。

一、硬盤

1.硬盤文件

   默認串口硬盤的設備文件為sda(第一塊硬盤)、sdb(第二塊硬盤)....

   默認並口硬盤的設備文件為hda(第一塊硬盤)、hdb(第二塊硬盤)....

2.物理分區和邏輯分區

  • 每塊硬盤最多有四個主分區(包括真正的分區和擴展分區),編號1~4
  • 5開始為邏輯分區;
  • 每個分區能分配獨立的文件系統

  如下圖,主分區容量=sda1+sda2(擴展分區);

  擴展分區容量=邏輯分區總容量=sda5,當然本例只有一個邏輯分區,還可以有sda6/7/8/9.....

$ sudo fdisk -l /dev/sda
Disk /dev/sda: 100 GiB, 107374182400 bytes, 209715200 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x801a0f4d

設備       啟動     Start    末尾    扇區 Size Id 類型
/dev/sda1  *         2048 205522943 205520896  98G 83 Linux
/dev/sda2       205524990 209713151   4188162   2G  5 擴展
/dev/sda5       205524992 209713151   4188160   2G 82 Linux 交換 / Solaris

3.用fdisk分區

  fdisk /dev/sda  就可以對硬盤進行分區,按照提示操作即可。

4.格式化文件系統mkfs

  分區以后,還需要格式化相關的文件系統,例如ext3/4等,格式化分揀系統實質上是向flash里寫入該文件系統需要的數據,用於文件系統管理磁盤。

  例如:mkfs.ext3 /dev/sda1

5.磁盤檢查 fsck

   用來檢查和維護不一致的文件系統。若系統掉電或磁盤發生問題,可利用fsck命令對文件系統進行檢查。

  例如 fsck.ext4 -p /dev/sda1

6.掛載mount

  mount /dev/sda1 /mnt/sda1

7.查看已掛載的磁盤分區和文件系統 df

  可用df命令查看已經掛載的文件系統。

8.自動掛載/etc/fstab

   每次手動mount非常麻煩,linux提供配置文件的方式,自動掛載磁盤

  以手上的嵌入式板子上的fstab為例說說明

zynq> cat /etc/fstab 
devpts                  /dev/pts        devpts  gid=5,mode=620  0 0
none                    /proc           proc    defaults        0 0
none                    /sys            sysfs   defaults        0 0
none                    /tmp            tmpfs   defaults        0 0
/dev/mtdblock0          /mnt/sdisk1     jffs2   defaults        0 0
/dev/mtdblock1          /mnt/sdisk2     jffs2   defaults        0 0

第一列 device
第二列 mount point
第三列 filesystem
第四列 perameters:
  1. default,一般用default即可,具體可以參考“鳥哥的linux私房菜”
第五列 dump, 能否被dump備份命令作用
第六列 fsck,是否以fsck校驗扇區,0不校驗,1和2都校驗,1較早而2較晚校驗

 

二、嵌入式flash

  已ZYNQ嵌入式單板為例。

1.設備文件

  嵌入式ZYNQ單板上,spi接口外界flash芯片,在dts中配置分區,linux啟動以后,自動生成如下文件:

  /dev/mtd0, /dev/mtd1, /dev/mtdblock0, /dev/mtdblock1.

2.格式化文件系統flash_eraseall -j

   $ flash_eraseall -j /dev/mtd0
     $ flash_eraseall -j /dev/mtd1

  格式化成jiffs2格式。

3.掛載mount

   $ mount -t jffs2 /dev/mtdblock0 /mnt/sdisk1
   $ mount -t jffs2 /dev/mtdblock1 /mnt/sdisk2

4.自動掛載/etc/fstab

    見硬盤自動掛載部分。

5.裝置啟動時自動判斷文件系統,並修復

  對於未格式化過或者不是jiffs2格式的flash,可用程序自動判斷並進行格式化。

 大體思路:df看是否掛載了,沒有掛載就格式化。

        id = Exec_sys_cmd_result(cmd, "df -h |grep /mnt/sdisk1 |wc -l");
        if(id == 0) {
            printf("/mnt/sdisk1 mount failed, format the spi 1 flash now....\n");
            printf(" Maybe we should wait for a few minutes....\n");
            Exec_sys_cmd(cmd, "flash_eraseall -j /dev/mtd0");
        }
        else 
            printf("/mnt/sdisk1 mount successful!\n");

 

 

  

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM