Difference between revisions of "Repartitioning a CompactFlash Disk for Linux"

From wiki.emacinc.com
Jump to: navigation, search
m (Reverted edits by Mdean (talk) to last revision by Mgloff)
m (Undo revision 2293 by Mgloff (talk) Too many changes to a FinalDraft to go to Complete.)
Line 1: Line 1:
{{todo|needs new version for Ubuntu (12.17.13-00:30->MD+);(12.17.13-15:05->KY+);(12.17.13-19:15->MG+)|Mike Dean|project=oe 4,oe 5,md,ky,mg,Complete}}
+
{{todo|needs new version for Ubuntu (12.17.13-00:30->MD+);(12.17.13-15:05->KY+)|Mike Dean|project=oe 4,oe 5,md,finaldraft,ky}}
  
 
The majority of EMAC's x86-based systems utilize CompactFlash as the primary storage device. By default, EMAC OE is provided with a single ext3 partition on the CompactFlash holding the root filesystem. The most efficient method for repartitioning this type of device is using a CompactFlash card reader on a Linux PC. While command-line tools can be utilized, the application <code>gparted</code> is a graphical application that works very well for resizing existing partitions. Follow the procedure below to resize the existing partition and create a secondary partition on a CompactFlash. The procedure can be modified to generate any partition layout desired.
 
The majority of EMAC's x86-based systems utilize CompactFlash as the primary storage device. By default, EMAC OE is provided with a single ext3 partition on the CompactFlash holding the root filesystem. The most efficient method for repartitioning this type of device is using a CompactFlash card reader on a Linux PC. While command-line tools can be utilized, the application <code>gparted</code> is a graphical application that works very well for resizing existing partitions. Follow the procedure below to resize the existing partition and create a secondary partition on a CompactFlash. The procedure can be modified to generate any partition layout desired.
Line 9: Line 9:
 
== Setup ==
 
== Setup ==
 
<cl>
 
<cl>
1. Power down the target board and carefully remove the CF card.
+
1. Power down the target board and carefully remove the CF disk.
* Insert the CF card into the CF reader connected to a Linux PC.
+
* Insert the CF disk into the CF reader connected to a Linux PC.
 
* The system will most likely bring up a window asking what to do with the device once it is detected. If this occurs, select ''Do Nothing'' or a similar option to indicate that the device should not be mounted automatically.
 
* The system will most likely bring up a window asking what to do with the device once it is detected. If this occurs, select ''Do Nothing'' or a similar option to indicate that the device should not be mounted automatically.
 
</cl>
 
</cl>
Line 25: Line 25:
 
[7414822.180716]  sdc: sdc1
 
[7414822.180716]  sdc: sdc1
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
In this example, <code>sdc</code> is the device corresponding to the CF disk. Also note that the size reported matches the expected size for the CF disk (2 GB in this case). The output also shows that a single partition was detected on the device: <code>sdc1</code>.
 
In this example, <code>sdc</code> is the device corresponding to the CF disk. Also note that the size reported matches the expected size for the CF disk (2 GB in this case). The output also shows that a single partition was detected on the device: <code>sdc1</code>.
 
+
* The <code>fdisk</code> command can also be used to list the available devices using the <code>-l</code> option. An example <code>fdisk -l</code> output is shown below.  
* The <code>fdisk</code> command can also be used to list the available devices using the <code>-l</code> option. An example output is shown below.  
 
 
 
 
<syntaxhighlight lang=console>
 
<syntaxhighlight lang=console>
developer@ldc:~$ sudo fdisk -l
+
developer@ldc:~$ sudo /sbin/fdisk -l
 
Disk /dev/sda: 500.1 GB, 500107862016 bytes
 
Disk /dev/sda: 500.1 GB, 500107862016 bytes
 
255 heads, 63 sectors/track, 60801 cylinders
 
255 heads, 63 sectors/track, 60801 cylinders
Line 41: Line 38:
 
/dev/sda2          60303      60801    4008217+  5  Extended
 
/dev/sda2          60303      60801    4008217+  5  Extended
 
/dev/sda5          60303      60801    4008186  82  Linux swap / Solaris
 
/dev/sda5          60303      60801    4008186  82  Linux swap / Solaris
 +
 +
Disk /dev/sdf: 2000.3 GB, 2000398934016 bytes
 +
255 heads, 63 sectors/track, 243201 cylinders
 +
Units = cylinders of 16065 * 512 = 8225280 bytes
 +
Disk identifier: 0x0b45dffc
 +
 +
  Device Boot      Start        End      Blocks  Id  System
 +
/dev/sdf1              1      243201  1953512001  83  Linux
  
 
Disk /dev/sdc: 2048 MB, 2048901120 bytes
 
Disk /dev/sdc: 2048 MB, 2048901120 bytes
Line 50: Line 55:
 
/dev/sdc1  *          1        1008    1999871+  83  Linux
 
/dev/sdc1  *          1        1008    1999871+  83  Linux
 
</syntaxhighlight>
 
</syntaxhighlight>
Two devices are listed in this output: <code>/dev/sda</code> and <code>/dev/sdc</code>. Looking at the disk sizes, <code>/dev/sdc</code> matches the 2 GB size of the CF card (2048 MB as listed in the output above).
+
Three devices are listed in this output: <code>/dev/sda</code>, <code>/dev/sdc</code>, and <code>/dev/sdf</code>. Looking at the disk sizes, <code>/dev/sdc</code> matches the 2 GB size of the CF card (2048 MB as listed in the output above).
  
 
* After checking the <code>dmesg</code> and <code>fdisk</code> output, inspect the mount locations on the system to verify that the correct disk is being used and that it has not been mounted by the system. In the example below, the <code>grep</code> command is used to search the output of the <code>mount</code> command for the string "/dev/sd".
 
* After checking the <code>dmesg</code> and <code>fdisk</code> output, inspect the mount locations on the system to verify that the correct disk is being used and that it has not been mounted by the system. In the example below, the <code>grep</code> command is used to search the output of the <code>mount</code> command for the string "/dev/sd".
 
 
<syntaxhighlight lang=console>
 
<syntaxhighlight lang=console>
 
developer@ldc:~$ mount | grep /dev/sd  
 
developer@ldc:~$ mount | grep /dev/sd  
 
/dev/sda1 on / type ext3 (rw,errors=remount-ro)
 
/dev/sda1 on / type ext3 (rw,errors=remount-ro)
 +
/dev/sdf1 on /media/backup type ext3 (rw)
 
</syntaxhighlight>
 
</syntaxhighlight>
 
+
This output illustrates that <code>/dev/sda1</code> is the root filesystem, <code>/dev/sdf1</code> is an auxiliary disk mounted on <code>/media/backup</code>, and <code>/dev/sdc1</code> is not mounted.  
This output illustrates that <code>/dev/sda1</code> is the root filesystem and <code>/dev/sdc1</code> is not mounted.  
 
 
</cl>
 
</cl>
 
+
Given the results from these three commands, <code>/dev/sdc</code> is the CF disk. If <code>/dev/sdc1</code> is mounted, it should be unmounted before continuing. <br>'''Do not continue if you are not certain which device node corresponds to the CF disk.'''
Given the results from these three commands, <code>/dev/sdc</code> is the CF disk. If <code>/dev/sdc1</code> is mounted, it should be unmounted before continuing.
 
<syntaxhighlight lang=console>
 
developer@ldc:~$ sudo umount /dev/sdc1
 
</syntaxhighlight>
 
 
 
'''Do not continue if you are not certain which device node corresponds to the CF disk.'''
 
 
 
  
 
== Backup the Existing Filesystem ==
 
== Backup the Existing Filesystem ==
 
After determining the CF disk on the system, make a backup of the CF disk to ensure that it can be restored if something goes wrong during the repartitioning process. The steps below assume that <code>/dev/sdc</code> is the CF disk as determined in the example above. Replace the <code>/dev/sdc</code> occurrences with the appropriate device for your system.
 
After determining the CF disk on the system, make a backup of the CF disk to ensure that it can be restored if something goes wrong during the repartitioning process. The steps below assume that <code>/dev/sdc</code> is the CF disk as determined in the example above. Replace the <code>/dev/sdc</code> occurrences with the appropriate device for your system.
 +
 
<cl>
 
<cl>
 
1. Begin by mounting the CF disk. It is important to do this manually rather than having the system auto-mount the device to prevent it from being mounted with options that could make it difficult to obtain a complete archive. The listing below demonstrates how to mount the CF disk to a temporary directory:  
 
1. Begin by mounting the CF disk. It is important to do this manually rather than having the system auto-mount the device to prevent it from being mounted with options that could make it difficult to obtain a complete archive. The listing below demonstrates how to mount the CF disk to a temporary directory:  
Line 78: Line 76:
 
developer@ldc:~$ sudo mount /dev/sdc1 /mnt/cf
 
developer@ldc:~$ sudo mount /dev/sdc1 /mnt/cf
 
</syntaxhighlight>  
 
</syntaxhighlight>  
 
 
After mounting, inspect the files at the mount point and verify that the filesystem is there as expected:  
 
After mounting, inspect the files at the mount point and verify that the filesystem is there as expected:  
 
<syntaxhighlight lang=console>
 
<syntaxhighlight lang=console>
Line 84: Line 81:
 
bin  boot  dev  etc  home  lib  lost+found  media  mnt  proc  root  sbin  sys  tmp  usr  var
 
bin  boot  dev  etc  home  lib  lost+found  media  mnt  proc  root  sbin  sys  tmp  usr  var
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
* Use <code>tar</code> to create a gzipped tar archive of the entire flash. The following commands will create a backup archive named <code>/home/developer/rootfs-backup/rootfs_20130404.tar.gz</code>:  
 
* Use <code>tar</code> to create a gzipped tar archive of the entire flash. The following commands will create a backup archive named <code>/home/developer/rootfs-backup/rootfs_20130404.tar.gz</code>:  
 
<syntaxhighlight lang=console>
 
<syntaxhighlight lang=console>
Line 90: Line 86:
 
developer@ldc:~$ sudo tar czvf ~/rootfs-backup/rootfs_20130404.tar.gz *
 
developer@ldc:~$ sudo tar czvf ~/rootfs-backup/rootfs_20130404.tar.gz *
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
* Unmount the CF disk once the backup is complete:<syntaxhighlight lang=console>
 
* Unmount the CF disk once the backup is complete:<syntaxhighlight lang=console>
 
developer@ldc:~$ cd
 
developer@ldc:~$ cd
Line 98: Line 93:
  
 
== Repartition the CF Disk using Gparted ==
 
== Repartition the CF Disk using Gparted ==
At this point you will need to decide on a partition scheme to use. In this example, the primary partition and ext3 filesystem will be resized to 200 MB and a new primary partition will be created. Depending on the application requirements, you multiple primary partitions can be created, or an extended partition with multiple logical partitions.
+
At this point you will need to decide on a partition scheme to use. In this example, the primary partition and ext3 filesystem will be resized to 200 MB and a new primary partition will be created. Depending on your application requirements, you could create multiple primary partitions, or an extended partition with multiple logical partitions.
  
 
Follow the steps below to repartition the CF disk.
 
Follow the steps below to repartition the CF disk.
 
 
{{mbox | type = notice | text =  Note that <code>gparted</code> will not apply any of the changes that are made to the disk partitions until the "Apply" button is pressed.}}
 
{{mbox | type = notice | text =  Note that <code>gparted</code> will not apply any of the changes that are made to the disk partitions until the "Apply" button is pressed.}}
  
 
<cl>
 
<cl>
1. Start the <code>gparted</code> utility, passing the CF disk device node as an argument as shown below:
+
1. [[File:Gparted Init.png|right|thumb|500px|Figure 1: Gparted Initial View]]
 +
Start the <code>gparted</code> utility, passing the CF disk device node as an argument as shown below:
 
<syntaxhighlight lang=console>
 
<syntaxhighlight lang=console>
 
developer@ldc:~$ sudo gparted /dev/sdc
 
developer@ldc:~$ sudo gparted /dev/sdc
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
This should bring up a window similar to the one shown in Figure 1.  
 
This should bring up a window similar to the one shown in Figure 1.  
 
+
<div style="clear: both"></div>
[[File:Gparted Init.png|left|thumb|500px|Figure 1: Gparted Initial View]]
+
* [[File:Gparted Resize Details.png|right|thumb|500px|Figure 2: Gparted Resize Details Dialog]]
 
+
Click on the partition to select it and press the ''Resize/Move'' button. Enter 200 in the ''New Size (MiB)'' setting in the new window that appears as shown in Figure 2. Press ''Resize/Move'' to queue this operation and return to the main window.  
<br clear=all>
+
<div style="clear: both"></div>
 
+
* [[File:Gparted Resize Operations.png|right|thumb|500px|Figure 3: Applying Pending Resize Operations in Gparted]]
* Click on the partition to select it and press the ''Resize/Move'' button. Enter 200 in the ''New Size (MiB)'' setting in the new window that appears as shown in Figure 2. Press ''Resize/Move'' to queue this operation and return to the main window.  
+
You should now see the primary partition followed by a large unallocated section. Although it is acceptable to continue making all changes before applying the changes, it can be advantageous to apply changes in steps. Press the ''Apply'' button to execute the pending operations required to resize the root partition and filesystem. A window will appear with the operations and their status. You may view details for each operation as it is executed. See Figure 3 for an example. Press ''Close'' to return to the main window once all operations have completed.
 
+
<div style="clear: both"></div>
[[File:Gparted Resize Details.png|left|thumb|500px|Figure 2: Gparted Resize Details Dialog]]
+
* [[File:Gparted New Details.png|right|thumb|500px|Figure 4: New Partition Details in Gparted]]
 
+
To create a new partition in the unallocated portion of the disk, click on the unallocated section to select it and press the ''New'' button. A new window will appear to enter the details for the partition. After entering the settings below (also shown in Figure 4), press ''Add'' to queue the required operations.
<br clear=all>
 
 
 
* You should now see the primary partition followed by a large unallocated section. Although it is acceptable to continue making all changes before applying the changes, it can be advantageous to apply changes in steps. Press the ''Apply'' button to execute the pending operations required to resize the root partition and filesystem. A window will appear with the operations and their status. You may view details for each operation as it is executed. See Figure 3 for an example. Press ''Close'' to return to the main window once all operations have completed.
 
 
 
[[File:Gparted Resize Operations.png|left|thumb|500px|Figure 3: Applying Pending Resize Operations in Gparted]]
 
 
 
<br clear=all>
 
 
 
* To create a new partition in the unallocated portion of the disk, click on the unallocated section to select it and press the ''New'' button. A new window will appear to enter the details for the partition. After entering the settings below (also shown in Figure 4), press ''Add'' to queue the required operations.
 
 
  i. Create as: Primary partition
 
  i. Create as: Primary partition
 
  * Filesystem: ext3
 
  * Filesystem: ext3
 
  * Use the maximum allowed size for the New Size setting
 
  * Use the maximum allowed size for the New Size setting
 +
<div style="clear: both"></div>
  
[[File:Gparted New Details.png|left|thumb|500px|Figure 4: New Partition Details in Gparted]]
+
* [[File:Gparted New Pending.png|right|thumb|500px|Figure 5: New Partition Pending in Gparted]]
 
+
At the main window the device layout should reflect the new partition as shown in Figure 5. Press ''Apply'' to commit the changes to the disk.
<br clear=all>
+
<div style="clear: both"></div>
 
+
* [[File:Gparted New Complete.png|right|thumb|500px|Figure 6: Gparted Window After Creating New Partition]]
* The device layout should reflect the new partition as shown in Figure 5 on the main window. Press ''Apply'' to commit the changes to the disk.
+
After all operations finish, verify the device layout and partition table as shown in the main window of <code>gparted</code>. Figure 6 shows that <code>/dev/sdc1</code> is the resized root filesystem and that <code>/dev/sdc2</code> is the new data partition.
 
+
<div style="clear: both"></div>  
[[File:Gparted New Pending.png|left|thumb|500px|Figure 5: New Partition Pending in Gparted]]
+
* Close <code>gparted</code> and remove the CF disk from the reader.
 
 
<br clear=all>
 
 
 
* After all operations finish, verify the device layout and partition table as shown in the main window of <code>gparted</code>. Figure 6 shows that <code>/dev/sdc1</code> is the resized root filesystem and that <code>/dev/sdc2</code> is the new data partition.
 
 
 
[[File:Gparted New Complete.png|left|thumb|500px|Figure 6: Gparted Window After Creating New Partition]]
 
 
 
<br clear=all>
 
 
 
* Close <code>gparted</code>.
 
 
</cl>
 
</cl>
 
==Reload Filesystem==
 
 
Follow the instructions [[Loading_Linux_Images_to_a_Compact_Flash_Disk | here]] to reload the backed up filesystem.
 
  
 
== Configure the Target Board ==
 
== Configure the Target Board ==
 
After repartitioning the CF disk, it is necessary to configure the target board to tell it where and how to mount the new partition. In this example, the new partition will be mounted on <code>/mnt/data</code> but any mount point may be used.
 
After repartitioning the CF disk, it is necessary to configure the target board to tell it where and how to mount the new partition. In this example, the new partition will be mounted on <code>/mnt/data</code> but any mount point may be used.
 
<cl>
 
<cl>
1. Insert the CF card into the target board and apply power to the system.
+
1. Insert the CF disk into the target board and apply power to the system.
 
* Log in as the root user after the system has booted.
 
* Log in as the root user after the system has booted.
 
* Verify the root disk and partitioning using the <code>fdisk</code> command as shown below.
 
* Verify the root disk and partitioning using the <code>fdisk</code> command as shown below.
Line 172: Line 144:
 
/dev/sda2              26        249    1799280  83 Linux
 
/dev/sda2              26        249    1799280  83 Linux
 
</syntaxhighlight>  
 
</syntaxhighlight>  
 
 
The output above shows that <code>/dev/sda</code> is the CF disk on this system and the new partition scheme was recognized correctly.
 
The output above shows that <code>/dev/sda</code> is the CF disk on this system and the new partition scheme was recognized correctly.
 
 
* Add an entry to the system file, <code>/etc/fstab</code>, to specify the mount parameters. Note that depending on the system, the new partition may be auto-mounted as a removable storage device. In this case, it was mounted on <code>/media/sda2</code> as shown from the <code>mount</code> command:  
 
* Add an entry to the system file, <code>/etc/fstab</code>, to specify the mount parameters. Note that depending on the system, the new partition may be auto-mounted as a removable storage device. In this case, it was mounted on <code>/media/sda2</code> as shown from the <code>mount</code> command:  
 
<syntaxhighlight lang=console>
 
<syntaxhighlight lang=console>
Line 180: Line 150:
 
/dev/sda2 on /media/sda2 type ext3 (rw,sync,relatime,errors=continue,barrier=1,data=writeback)
 
/dev/sda2 on /media/sda2 type ext3 (rw,sync,relatime,errors=continue,barrier=1,data=writeback)
 
</syntaxhighlight>  
 
</syntaxhighlight>  
 
 
Even if the device is auto-mounted, EMAC recommends adding an entry to the <code>fstab</code> to specify the exact parameters for mounting the new partition as described below.
 
Even if the device is auto-mounted, EMAC recommends adding an entry to the <code>fstab</code> to specify the exact parameters for mounting the new partition as described below.
 
  i. Create the new mount point: <code>/mnt/data</code>.  
 
  i. Create the new mount point: <code>/mnt/data</code>.  
Line 187: Line 156:
 
root@emac-oe:~# mkdir /mnt/data
 
root@emac-oe:~# mkdir /mnt/data
 
  </syntaxhighlight>
 
  </syntaxhighlight>
 
+
  * Edit the <code>fstab</code> to specify the new mount. For CF disks using ext3, EMAC recommends specifying the following mount parameters: <code>noatime</code>, <code>barrier=1</code>, <code>data=journal</code>. (See [[Editing a File|this page]] for more information on how to edit a file.)  
  * Edit the <code>fstab</code> to specify the new mount. For CF disks using ext3, EMAC recommends specifying the following mount parameters: <code>noatime</code>, <code>barrier=1</code> and <code>data=journal</code>. (See [[Editing a File|this page]] for more information on how to edit a file.)  
 
 
  <syntaxhighlight lang=console>
 
  <syntaxhighlight lang=console>
 
root@emac-oe:~# vi /etc/fstab  
 
root@emac-oe:~# vi /etc/fstab  
 
  </syntaxhighlight>  
 
  </syntaxhighlight>  
 
+
  Make the following entry in the file from <code>vi</code>:  
  Add the following entry in the file from <code>vi</code>:  
 
 
  <syntaxhighlight lang=console>
 
  <syntaxhighlight lang=console>
 
/dev/sda2    /mnt/data    ext3    rw,noatime,barrier=1,data=journal    0 0  
 
/dev/sda2    /mnt/data    ext3    rw,noatime,barrier=1,data=journal    0 0  
 
  </syntaxhighlight>
 
  </syntaxhighlight>
 
 
  * Mount the partition with the new settings and verify that it mounts correctly.  
 
  * Mount the partition with the new settings and verify that it mounts correctly.  
 
  <syntaxhighlight lang=console>
 
  <syntaxhighlight lang=console>
Line 206: Line 172:
 
/dev/sda2 on /mnt/data type ext3 (rw,noatime,errors=continue,barrier=1,data=journal)
 
/dev/sda2 on /mnt/data type ext3 (rw,noatime,errors=continue,barrier=1,data=journal)
 
  </syntaxhighlight>
 
  </syntaxhighlight>
 
 
  * Modify any necessary applications to store data on the new partition.
 
  * Modify any necessary applications to store data on the new partition.
 
</cl>
 
</cl>
  
 
[[Category:Filesystems]]
 
[[Category:Filesystems]]

Revision as of 12:34, 3 January 2014

TODO: {{#todo:needs new version for Ubuntu (12.17.13-00:30->MD+);(12.17.13-15:05->KY+)|Mike Dean|oe 4,oe 5,md,finaldraft,ky}}

The majority of EMAC's x86-based systems utilize CompactFlash as the primary storage device. By default, EMAC OE is provided with a single ext3 partition on the CompactFlash holding the root filesystem. The most efficient method for repartitioning this type of device is using a CompactFlash card reader on a Linux PC. While command-line tools can be utilized, the application gparted is a graphical application that works very well for resizing existing partitions. Follow the procedure below to resize the existing partition and create a secondary partition on a CompactFlash. The procedure can be modified to generate any partition layout desired.



Setup

  1. Power down the target board and carefully remove the CF disk.

  2. Insert the CF disk into the CF reader connected to a Linux PC.

  3. The system will most likely bring up a window asking what to do with the device once it is detected. If this occurs, select Do Nothing or a similar option to indicate that the device should not be mounted automatically.

Determine which Device to Use

Next you must determine the device node corresponding to the CF disk. There are several methods that can be used to accomplish this as described in the procedure below:

  1. dmesg can provide information about the disk that was reported by the kernel when it was detected as shown below.

    developer@ldc:~$ dmesg | tail
    [7414822.178026] sd 6:0:0:1: [sdc] 4001760 512-byte logical blocks: (2.04 GB/1.90 GiB)
    [7414822.179094] sd 6:0:0:1: [sdc] Assuming drive cache: write through
    [7414822.180711] sd 6:0:0:1: [sdc] Assuming drive cache: write through
    [7414822.180716]  sdc: sdc1
    

    In this example, sdc is the device corresponding to the CF disk. Also note that the size reported matches the expected size for the CF disk (2 GB in this case). The output also shows that a single partition was detected on the device: sdc1.

  2. The fdisk command can also be used to list the available devices using the -l option. An example fdisk -l output is shown below.

    developer@ldc:~$ sudo /sbin/fdisk -l
    Disk /dev/sda: 500.1 GB, 500107862016 bytes
    255 heads, 63 sectors/track, 60801 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    Disk identifier: 0x00000000
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1   *           1       60302   484375783+  83  Linux
    /dev/sda2           60303       60801     4008217+   5  Extended
    /dev/sda5           60303       60801     4008186   82  Linux swap / Solaris
    
    Disk /dev/sdf: 2000.3 GB, 2000398934016 bytes
    255 heads, 63 sectors/track, 243201 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    Disk identifier: 0x0b45dffc
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdf1               1      243201  1953512001   83  Linux
    
    Disk /dev/sdc: 2048 MB, 2048901120 bytes
    64 heads, 62 sectors/track, 1008 cylinders
    Units = cylinders of 3968 * 512 = 2031616 bytes
    Disk identifier: 0x6a5f7029
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdc1   *           1        1008     1999871+  83  Linux
    

    Three devices are listed in this output: /dev/sda, /dev/sdc, and /dev/sdf. Looking at the disk sizes, /dev/sdc matches the 2 GB size of the CF card (2048 MB as listed in the output above).

  3. After checking the dmesg and fdisk output, inspect the mount locations on the system to verify that the correct disk is being used and that it has not been mounted by the system. In the example below, the grep command is used to search the output of the mount command for the string "/dev/sd".

    developer@ldc:~$ mount | grep /dev/sd 
    /dev/sda1 on / type ext3 (rw,errors=remount-ro)
    /dev/sdf1 on /media/backup type ext3 (rw)
    

    This output illustrates that /dev/sda1 is the root filesystem, /dev/sdf1 is an auxiliary disk mounted on /media/backup, and /dev/sdc1 is not mounted.

Given the results from these three commands, /dev/sdc is the CF disk. If /dev/sdc1 is mounted, it should be unmounted before continuing.
Do not continue if you are not certain which device node corresponds to the CF disk.

Backup the Existing Filesystem

After determining the CF disk on the system, make a backup of the CF disk to ensure that it can be restored if something goes wrong during the repartitioning process. The steps below assume that /dev/sdc is the CF disk as determined in the example above. Replace the /dev/sdc occurrences with the appropriate device for your system.


  1. Begin by mounting the CF disk. It is important to do this manually rather than having the system auto-mount the device to prevent it from being mounted with options that could make it difficult to obtain a complete archive. The listing below demonstrates how to mount the CF disk to a temporary directory:

    developer@ldc:~$ sudo mkdir /mnt/cf
    developer@ldc:~$ sudo mount /dev/sdc1 /mnt/cf
    

    After mounting, inspect the files at the mount point and verify that the filesystem is there as expected:

    developer@ldc:~$ ls /mnt/cf
    bin  boot  dev  etc  home  lib  lost+found  media  mnt  proc  root  sbin  sys  tmp  usr  var
    
  2. Use tar to create a gzipped tar archive of the entire flash. The following commands will create a backup archive named /home/developer/rootfs-backup/rootfs_20130404.tar.gz:

    developer@ldc:~$ cd /mnt/cf
    developer@ldc:~$ sudo tar czvf ~/rootfs-backup/rootfs_20130404.tar.gz *
    
  3. Unmount the CF disk once the backup is complete:
    developer@ldc:~$ cd
    developer@ldc:~$ sudo umount /dev/sdc1
    

Repartition the CF Disk using Gparted

At this point you will need to decide on a partition scheme to use. In this example, the primary partition and ext3 filesystem will be resized to 200 MB and a new primary partition will be created. Depending on your application requirements, you could create multiple primary partitions, or an extended partition with multiple logical partitions.

Follow the steps below to repartition the CF disk.


  1. Figure 1: Gparted Initial View

    Start the gparted utility, passing the CF disk device node as an argument as shown below:

    developer@ldc:~$ sudo gparted /dev/sdc
    

    This should bring up a window similar to the one shown in Figure 1.

  2. Figure 2: Gparted Resize Details Dialog

    Click on the partition to select it and press the Resize/Move button. Enter 200 in the New Size (MiB) setting in the new window that appears as shown in Figure 2. Press Resize/Move to queue this operation and return to the main window.

  3. Figure 3: Applying Pending Resize Operations in Gparted

    You should now see the primary partition followed by a large unallocated section. Although it is acceptable to continue making all changes before applying the changes, it can be advantageous to apply changes in steps. Press the Apply button to execute the pending operations required to resize the root partition and filesystem. A window will appear with the operations and their status. You may view details for each operation as it is executed. See Figure 3 for an example. Press Close to return to the main window once all operations have completed.

  4. Figure 4: New Partition Details in Gparted

    To create a new partition in the unallocated portion of the disk, click on the unallocated section to select it and press the New button. A new window will appear to enter the details for the partition. After entering the settings below (also shown in Figure 4), press Add to queue the required operations.

    1. Create as: Primary partition

    2. Filesystem: ext3

    3. Use the maximum allowed size for the New Size setting

  5. Figure 5: New Partition Pending in Gparted

    At the main window the device layout should reflect the new partition as shown in Figure 5. Press Apply to commit the changes to the disk.

  6. Figure 6: Gparted Window After Creating New Partition

    After all operations finish, verify the device layout and partition table as shown in the main window of gparted. Figure 6 shows that /dev/sdc1 is the resized root filesystem and that /dev/sdc2 is the new data partition.

  7. Close gparted and remove the CF disk from the reader.

Configure the Target Board

After repartitioning the CF disk, it is necessary to configure the target board to tell it where and how to mount the new partition. In this example, the new partition will be mounted on /mnt/data but any mount point may be used.

  1. Insert the CF disk into the target board and apply power to the system.

  2. Log in as the root user after the system has booted.

  3. Verify the root disk and partitioning using the fdisk command as shown below.

    root@emac-oe:~# fdisk -l 
    Disk /dev/sda: 2048 MB, 2048901120 bytes
    255 heads, 63 sectors/track, 249 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
       Device Boot      Start         End      Blocks  Id System
    /dev/sda1   *           1          25      200781  83 Linux
    /dev/sda2              26         249     1799280  83 Linux
    

    The output above shows that /dev/sda is the CF disk on this system and the new partition scheme was recognized correctly.

  4. Add an entry to the system file, /etc/fstab, to specify the mount parameters. Note that depending on the system, the new partition may be auto-mounted as a removable storage device. In this case, it was mounted on /media/sda2 as shown from the mount command:

    root@emac-oe:~# mount | grep sda2 
    /dev/sda2 on /media/sda2 type ext3 (rw,sync,relatime,errors=continue,barrier=1,data=writeback)
    

    Even if the device is auto-mounted, EMAC recommends adding an entry to the fstab to specify the exact parameters for mounting the new partition as described below.

    1. Create the new mount point: /mnt/data.

      root@emac-oe:~# mount -o remount,rw /
      root@emac-oe:~# mkdir /mnt/data
      
    2. Edit the fstab to specify the new mount. For CF disks using ext3, EMAC recommends specifying the following mount parameters: noatime, barrier=1, data=journal. (See this page for more information on how to edit a file.)

      root@emac-oe:~# vi /etc/fstab
      

      Make the following entry in the file from vi:

      /dev/sda2    /mnt/data    ext3    rw,noatime,barrier=1,data=journal    0 0
      
    3. Mount the partition with the new settings and verify that it mounts correctly.

      root@emac-oe:~# mount -o remount,ro /
      root@emac-oe:~# umount /dev/sda2
      root@emac-oe:~# mount /dev/sda2
      root@emac-oe:~# mount | grep sda2 
      /dev/sda2 on /mnt/data type ext3 (rw,noatime,errors=continue,barrier=1,data=journal)
      
    4. Modify any necessary applications to store data on the new partition.