2011年6月30日 星期四

新增硬碟

如何新增硬碟 ?

在 Windows/Linux 底下,新增硬碟是一件很常見的工作,一般來說,新增硬碟的流程如下:

1. fdisk 建立硬碟分割
2. 格式化
3. 掛載
4. 確保下次重新開機後能再度使用此硬碟


今天我們以另一隻隨身碟來作為新增硬碟的例子,未來各位可以自行參考安裝新的硬碟。

[判別新的硬碟]

請執行 dmesg 看最後幾行,如以下所示:

irectory
[    9.426781] NFSD: starting 90-second grace period
[   19.698735] apm: BIOS not found.
[   19.763297] sshd (1261): /proc/1261/oom_adj is deprecated, please use /proc/1261/oom_score_adj instead.
[   19.968007] eth0: no IPv6 routers present

接著請插上隨身碟,等待五秒,再執行 dmesg,並觀察其結果,如以下所示:

[   19.968007] eth0: no IPv6 routers present
[168958.284096] usb 1-5: new high speed USB device using ehci_hcd and address 2
[168958.418552] usb 1-5: New USB device found, idVendor=058f, idProduct=6387
[168958.418557] usb 1-5: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[168958.418560] usb 1-5: Product: Mass Storage Device
[168958.418563] usb 1-5: Manufacturer: JetFlash
[168958.418565] usb 1-5: SerialNumber: LRSLABPD
[168958.453634] Initializing USB Mass Storage driver...
[168958.453731] scsi2 : usb-storage 1-5:1.0
[168958.453815] usbcore: registered new interface driver usb-storage
[168958.453817] USB Mass Storage support registered.
[168959.452829] scsi 2:0:0:0: Direct-Access     JetFlash Transcend 16GB   8.07 PQ: 0 ANSI: 2
[168959.453276] sd 2:0:0:0: Attached scsi generic sg2 type 0
[168959.456217] sd 2:0:0:0: [sdb] 31375360 512-byte logical blocks: (16.0 GB/14.9 GiB)
[168959.456680] sd 2:0:0:0: [sdb] Write Protect is off
[168959.456683] sd 2:0:0:0: [sdb] Mode Sense: 03 00 00 00
[168959.457555] sd 2:0:0:0: [sdb] No Caching mode page present
[168959.457559] sd 2:0:0:0: [sdb] Assuming drive cache: write through
[168959.460105] sd 2:0:0:0: [sdb] No Caching mode page present
[168959.460110] sd 2:0:0:0: [sdb] Assuming drive cache: write through
[168959.910567]  sdb: unknown partition table
[168959.913678] sd 2:0:0:0: [sdb] No Caching mode page present
[168959.913682] sd 2:0:0:0: [sdb] Assuming drive cache: write through
[168959.913684] sd 2:0:0:0: [sdb] Attached SCSI removable disk

從以上訊息,我們可以得知新增加的隨身碟為 /dev/sdb,接著我們可以針對 /dev/sdb 來進行以下操作:分割、格式化、掛載。

** 警告 ** fdisk 殺傷力很大,如果你原先電腦中有內建硬碟,請勿誤用 fdisk,否則一失足成千古恨!!

[(用 root 權限)使用 fdisk 來進行硬碟分割]

fdisk /dev/sdb

--------------------------------------------------------------------------------
Command (m for help):m              -> 呼叫 help 畫面,顯示可用之命令
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          -> 修改分割區 id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit             -> 跳出而且存檔
   x   extra functionality (experts only)       -> 專家指令,不熟不要用

--------------------------------------------------------------------------------
Command (m for help):p -> 列印(顯示)分割區表

Disk /dev/sdb: 16.1 GB, 16064184320 bytes
64 heads, 32 sectors/track, 15320 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xea79e48d

   Device Boot      Start         End      Blocks   Id  System

上面畫面告訴我們此硬碟有 16 GB,目前沒有任何分割區
--------------------------------------------------------------------------------
Command (m for help): p

Disk /dev/sdb: 1004 MB, 1004535808 bytes
256 heads, 63 sectors/track, 121 cylinders
Units = cylinders of 16128 * 512 = 8257536 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         122      979968    c  W95 FAT32 (LBA)
Partition 1 has different physical/logical beginnings (non-Linux?):
     phys=(1023, 255, 63) logical=(0, 32, 33)
Partition 1 has different physical/logical endings:
     phys=(1023, 255, 63) logical=(121, 166, 38)

上面畫面告訴我們此硬碟有 1004 MB,目前有 /dev/sdb1 分割區,其型別為 W95 FAT32 (LBA)

--------------------------------------------------------------------------------
Command (m for help): d
Selected partition 1

由於我們只有一個分割區,因此按 d 指令會自動將此分割區砍掉,請注意,此時還有挽回的餘地,只要按 q 跳出即不會對硬碟造成任何傷害。

--------------------------------------------------------------------------------
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-15320, default 1): 1
Last cylinder, +cylinders or +size{K,M,G} (1-15320, default 15320):
Using default value 15320

新增一個主要(primary)分割區,其起始磁柱為 1,結束磁柱為 15320,如果你的隨身碟容量較少,其數字也較小,作完結果如下:

Command (m for help): p

Disk /dev/sdb: 16.1 GB, 16064184320 bytes
64 heads, 32 sectors/track, 15320 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xfc46e2f6

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1       15320    15687664   83  Linux

 --------------------------------------------------------------------------------
Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

執行完 w 指令就將我們所分割的隨身碟儲存起來,w 指令的破壞力相當強大,一但執行完 w 指令,裡面原始之資料就跟你說 bye bye。

[(用 root 權限)使用 mkfs.ext4 來進行硬碟格式化]

剛剛作完的流程會讓我們產生一新分割區叫 /dev/sdb1,接下來是針對此分割區進行格式化,請執行:

mkfs.ext4 /dev/sdb1
                        ^ -> 千萬別打錯字母!!!!!!!!!!!!!!!!!!!

mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
981120 inodes, 3921916 blocks
196095 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4018143232
120 block groups
32768 blocks per group, 32768 fragments per group
8176 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208

Writing inode tables:  81/120
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 21 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

作完指令後,你的隨身碟已經完成格式化了。

[(用 root 權限)使用 mount 來進行分割區掛載]

先以 df -h 來觀看目前掛載之硬碟及掛載點:

檔案系統              Size  Used Avail Use% 掛載點
/dev/sda1              37G  2.6G   33G   8% /
tmpfs                 1.5G  4.0K  1.5G   1% /lib/init/rw
udev                  1.5G  196K  1.5G   1% /dev
tmpfs                 1.5G     0  1.5G   0% /dev/shm
/dev/sda5              74G   53G   17G  77% /home
/dev/sda2             138G   92G   40G  71% /opt
/dev/sda3              28G  5.8G   21G  22% /usr


接著請執行

mount /dev/sdb1 /mnt

將 /dev/sdb1 分割區掛載至 /mnt 目錄下,接著可再執行 df -h 來確認,其結果如下。

檔案系統              Size  Used Avail Use% 掛載點
/dev/sda1              37G  2.6G   33G   8% /
tmpfs                 1.5G  4.0K  1.5G   1% /lib/init/rw
udev                  1.5G  196K  1.5G   1% /dev
tmpfs                 1.5G     0  1.5G   0% /dev/shm
/dev/sda5              74G   53G   17G  77% /home
/dev/sda2             138G   92G   40G  71% /opt
/dev/sda3              28G  5.8G   21G  22% /usr
/dev/sdb1              15G  166M   14G   2% /mnt

--------------------------------------------------------------------------------
在隨身碟上建立空的測試檔,請執行:

dd if=/dev/zero         of=/mnt/test            bs=1M           count=20
   輸入自 /dev/zero     輸出至 /mnt/test        blocksize=1MB   20 區塊


上述指令可以在 /mnt 中產生一個 test 檔,其大小為 20 MB

 --------------------------------------------------------------------------------
請執行 umount /mnt 將 /mnt 目錄解除掛載

--------------------------------------------------------------------------------
確保下次重新開機後能再度使用此硬碟

硬碟的掛載表在 /etc/fstab,如果我們希望在下次開機時能自動掛載,請在 /etc/fstab
中加入:

/dev/sdb1 /mnt ext4 defaults 1 2

加入後可以執行

mount -a 來測試是否會自動掛載

mount -a 是針對 /etc/fstab 中之設定來掛載相對應的裝置至相對應的目錄!!

但是 /etc/fstab 加入
/dev/sdb1 /mnt ext4 defaults 1 2

此方式有何缺點 ?


1. 若隨身碟自動辨識為 /dev/sdc1 的話,那下次開機認不到

 /dev/sdb1 -> 隨身碟
 /dev/sdb1 -> SATA 硬碟
 /dev/sdb1 -> SCSI 硬碟

在新版 Linux 中,為了防止認錯人,因此使用 block id 的技術,要知道隨身碟的
block id,請執行:

blkid /dev/sdb1

/dev/sdb1: UUID="e6614b38-6d88-4b87-b8f4-35fad9d4611f" TYPE="ext4"

上述 UUID=.. 即為此隨身碟的 block id。

***

== 掛載 windows 隨身碟 ==

當我們執行

fdisk -lu /dev/sdb

得到以下訊息時:


root@pc-29:/home/herman# fdisk -lu /dev/sdb

Disk /dev/sdb: 4009 MB, 4009754624 bytes
23 heads, 23 sectors/track, 14804 cylinders, total 7831552 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
Disk identifier: 0xc3072e18

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            8064     7831551     3911744    c  W95 FAT32 (LBA)

我們可以推論 /dev/sdb 硬碟有 4009 MB 大小,其分割區為 /dev/sdb1,其分割區以 W95 FAT32 (LAB) 之格式來格式化。這代表此隨身碟是以 Windows 分割/格式化的。要掛載此隨身之指令為:

# mount -o iocharset=big5 /dev/sdb1 /mnt

執行完我們可以使用 df -h 來驗證此隨身碟是否已掛載,其中 -o iocharset=big5 是指掛載參數設定為 big5 中文檔名。如果我們的檔案以中文檔名存檔,但是掛載時沒有加此 -o 參數,則掛載完後之檔名會變成亂碼。

解除掛載請先離開 /mnt 目錄,再執行:

# umount /dev/sdb1

# umount /mnt
即可。


** 一行指令清掉 partition table

假設我們要清掉 /dev/sdb 的 partition table,請執行以下指令即可:

# dd if=/dev/zero of=/dev/sdb bs=512 count=1 \Enter

請千萬注意別打成系統碟如 /dev/sda,否則只能重灌!!



== 還原隨身碟為 windows 格式 ==

1. 使用 fdisk 將 /dev/sdb1 改為 partition id 為 b (按 t 來修改)
2. mkdosfs /dev/sdb1 -> 將此分割區格式化

沒有留言:

張貼留言