1.先確定usb裝置是否有偵測到
$ lsusb
Bus 001 Device 042: ID 090c:6000 Feiya Technology Corp. SD/SDHC Card Reader (SG365 / FlexiDrive XC+)如果沒有的話,就用dmesg查看Ubuntu把隨身碟辨認成什麼裝置
$ dmesg |grep usb
2.查詢目前掛載到的disk與裝置(/dev)的連結
$ ls -al /dev/disk/by-id/
lrwxrwxrwx 1 root root 9 2010-11-26 17:37 usb-Generic_USB2.0_Card_Reader_12345678901234567890-0:0 -> ../../sdb查詢隨身碟的partition tables(非必要)
$ sudo fdisk -l /dev/sdb
Disk /dev/sdb: 2006 MB, 2006974464 bytes 62 heads, 62 sectors/track, 1019 cylinders Units = cylinders of 3844 * 512 = 1968128 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System3.切成只有一個partition
$ sudo fdisk /dev/sdb
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u').查詢指令
Command (m for help): m
Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition l list known partition types m print this menu n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only)4.建立新的partition(如果不是全新的disk)
Command (m for help): n
Command action e extended p primary partition (1-4)新增primary partition,起始磁柱為1,最後的磁柱為1019(default)
p Partition number (1-4): 1 First cylinder (1-1019, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-1019, default 1019): Using default value 1019確認partition table
Command (m for help): p
Disk /dev/sdb: 2006 MB, 2006974464 bytes 62 heads, 62 sectors/track, 1019 cylinders Units = cylinders of 3844 * 512 = 1968128 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/sdb1 1 1019 1958487 83 Linux5.建立完成後寫入partition table
Command (m for help): w如果順利的話,會出現這樣的訊息
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
如果出現
WARNING: Re-reading the partition table failed with error 22: Invalid argument.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
解決方法如以下步驟
$ sudo fdisk /dev/sdb
Command (m for help): p Disk /dev/sdb: 4005 MB, 4005560320 bytes 124 heads, 62 sectors/track, 1017 cylinders Units = cylinders of 7688 * 512 = 3936256 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x0f60e47c Device Boot Start End Blocks Id System建一個空的DOS partition table到隨身碟
Command (m for help): o
Building a new DOS disklabel with disk identifier 0x38e86b45. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u').再次存檔
Command (m for help): w寫入成功了
The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.就再重切一次吧
$ sudo fdisk /dev/sdb
Command (m for help): n
Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-1019, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-1019, default 1019): Using default value 1019 Command (m for help): p Disk /dev/sdb: 2006 MB, 2006974464 bytes 62 heads, 62 sectors/track, 1019 cylinders Units = cylinders of 3844 * 512 = 1968128 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/sdb1 1 1019 1958487 83 Linux建立完成後寫入partition table
Command (m for help): w這次就寫入成功
The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
6.接著是格式化隨身碟
假設掛載在/dev/sdb1的裝置希望格式化成ext2格式
$ sudo mkfs.ext2 /dev/sdb1
mke2fs 1.41.11 (14-Mar-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 122640 inodes, 489952 blocks 24497 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=503316480 15 block groups 32768 blocks per group, 32768 fragments per group 8176 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912 Writing inode tables: done Writing superblocks and filesystem accounting information:改變隨身碟的系統標籤(非必要)
$ sudo e2label /dev/sdb1 {label}建立掛載點
$ mkdir {path/to/dir}將隨身碟掛上
$ mount -t ext2 /dev/sdb1 {/path/to/dir}
有時候在資料讀取/寫入過程中,如果I/O沒有順利結束,就會發生錯誤,例如看到這樣的訊息
$ sudo mount /dev/sdb1 {/path/to/dir}
$ cd {/path/to/dir}
$ sudo rm -rf *
rm: cannot remove `data/system/batterystats.bin': Input/output error rm: cannot remove `data/system/packages.xml': Input/output error這時候就先umount隨身碟,用fsck進行修復,然後一路y到底
$ sudo umount /dev/sdb1
$ sudo fsck.ext2 /dev/sdb1
e2fsck 1.41.11 (14-Mar-2010) /dev/sdb1 contains a file system with errors, check forced. Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Entry 'batterystats.bin' in /data/system (24504) has deleted/unused inode 24604. Clear? yes Entry 'packages.xml' in /data/system (24504) has deleted/unused inode 24608. Clear ? yes Pass 3: Checking directory connectivity /lost+found not found. Create ? yes Pass 4: Checking reference counts Pass 5: Checking group summary information Block bitmap differences: -(16385--16733) -26624 -(110592--110600) -124933 -(151552--151553) -153601 -(278528--279183) Fix ? yes Free blocks count wrong for group #0 (31663, counted=32013). Fix ? yes Free blocks count wrong for group #3 (32004, counted=32014). Fix ? yes Free blocks count wrong for group #4 (32253, counted=32256). Fix ? yes Free blocks count wrong for group #8 (31600, counted=32256). Fix ? yes Free blocks count wrong (959025, counted=960044). Fix ? yes Inode bitmap differences: -(15--16) -24602 -24608 -(65281--65299) Fix ? yes Free inodes count wrong for group #0 (8147, counted=8149). Fix ? yes Free inodes count wrong for group #3 (8156, counted=8158). Fix ? yes Free inodes count wrong for group #8 (8141, counted=8160). Fix ? yes Directories count wrong for group #8 (1, counted=0). Fix ? yes Free inodes count wrong (244764, counted=244787). Fix ? yes /dev/sdb1: ***** FILE SYSTEM WAS MODIFIED ***** /dev/sdb1: 13/244800 files (0.0% non-contiguous), 17285/977329 blocks
沒有留言:
張貼留言