How to mount partitions from a disk image

No Comments

You can use the dd command to create images of disk drives, removable usb disks and so on.

If the disk you are making the image of has multiple partitions you cannot simply type “mount -o loop <image> <mount point>” to mount the resulting disk image file.

First you need to find the partitions offsets with the sfdisk command:

# sfdisk -l -uB image.iso
Disk image.iso: cannot get geometry
Disk image.iso: 973 cylinders, 255 heads, 63 sectors/track
Warning: The partition table looks like it was made
for C/H/S=*/4/32 (instead of 973/255/63).
For this listing I'll assume that geometry.
Units = blocks of 1024 bytes, counting from 0
Device Boot   Start       End    #blocks   Id  System
image.iso1   *       16     31231      31216    e  W95 FAT16 (LBA)
image.iso2        32256   7265599    7233344   83  Linux
image.iso3            0         -          0    0  Empty
image.iso4            0         -          0    0  Empty

With this information you can calculate the starting offset of each partition by multiplying the start block by the block units in bytes (1024 bytes in this case):

# echo $(( 32256 * 1024 ))
33030144
# echo $(( 16 * 1024 ))
16384

Mounting is easy now, you specify the file system type and the partition offset. To mount the first partition on the example file above:

# mount -o loop,offset=16384 -t vfat image.iso /mnt/

To mount the second partition:

# mount -o loop,offset=33030144 -t ext2 image.iso /mnt/

Here you go! Hope it helps!

How to make network manager ignore a networking device

No Comments

This was done on Ubuntu 10.10.

My laptop has a built in wifi device but it doesn’t supports the N norm.

I bought a new wifi device and I want network manager to ignore the built in.

To do that I added the following line to /etc/network/interfaces:

iface eth1 inet manual

This makes eth1 configuration manual and network manager ignores it.

How to make Ralink rt2870 driver work on Ubuntu 10.10

17 Comments

This works with Ubuntu 10.10 and a usb wifi adapter with the Ralink rt2870 chipset.

The driver released with Ubuntu kernel 2.6.35-22-generic is version 2.1.0.0 and doesn’t work…

I downloaded version 2.4.0.1 from Ralink web site and compiled it the following way.

cd /usr/src
tar xvfj /tmp/2010_0709_RT2870_Linux_STA_v2.4.0.1.tar.bz2
cd 2010_0709_RT2870_Linux_STA_v2.4.0.1/
sed -i.bak "s/HAS_WPA_SUPPLICANT=n/HAS_WPA_SUPPLICANT=y/" os/linux/config.mk
sed -i.bak "s/HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=n/HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y/" os/linux/config.mk

Changed file include/os/rt_linux.h line 1077 to:

#define RTUSB_URB_ALLOC_BUFFER(pUsb_Dev, BufSize, pDma_addr) usb_alloc_coherent(pUsb_Dev, BufSize, GFP_ATOMIC, pDma_addr)

And line 1078 to:

#define RTUSB_URB_FREE_BUFFER(pUsb_Dev, BufSize, pTransferBuf, Dma_addr)        usb_free_coherent(pUsb_Dev, BufSize, pTransferBuf, Dma_addr)

Then compiled it:

make

Removed the Ubuntu released driver out of the way:

mv /lib/modules/`uname -r`/kernel/drivers/staging/rt2870 ~/.rt2870.bak

And installed the new one:

make install

Also removed the rt2800 module out of the way:

echo 'blacklist rt2800usb' >> /etc/modprobe.d/blacklist.conf

And rebooted my pc.

After the system booted up the new driver was loaded:

# modinfo rt2870sta | grep -i version
version: 2.4.0.0
srcversion: 5598BFE60F8B720D8D64062
vermagic: 2.6.35-22-generic SMP mod_unload modversions 686

Also I could connect to my wireless network at 130Mb/s (from the output of nm-tool).

Skype on Ubuntu Linux 10.04

2 Comments

There are some issues with version 2.1.0.81 of Skype on Ubuntu Linux (possibly other distributions as well).

The first issue is the default theme on Skype versus the one for Ubuntu. The default theme on Skype configured menu text with dark colors and the default Ubuntu theme configures menus with dark background. This makes the menu text mostly invisible.

Luckily by moving the mouse pointer over the menu the background highlight makes the text visible.

To change this permanently select “Options” from the Skype menu on the bottom left corner of the Skype window or press CTRL+O.

On the “General” section change the style from “Cleanlooks” to “Desktop Settings”. Close and restart Skype. Now you should see the menu text clearly.

The second issue is a problem with the video camera. This might or might not happen to you. It is a known problem with a workaround on the Skype release notes:

Skype does not work well with newer version of GSPCA Webcams driver (Linux Kernel >=2.6.27), possible workaround:

  • Ubuntu 32 bit: install “libv4l-0″ package and launch Skype with: LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so skype
  • Ubuntu 64 bit: install “lib32v4l-0″ package and launch Skype with: LD_PRELOAD=/usr/lib32/libv4l/v4l1compat.so skype
  • Other distributions might have the same library, but may have a different path.
  • In my case I already had the package ??libv4l-0 installed. If that’s not your case, or if you’re not sure, run on a terminal window:

    sudo aptitude install libv4l-0

    With the library installed you cannot simply start Skype from the start menu because the variable LD_PRELOAD needs to be customized for Skype.

    So you have to start it from a terminal window or change Ubuntu menu. To change Ubuntu menu do the following:

    • Open the System > Preferences menu and select “Main Menu”
    • On the left select the “Internet” menu and on the right select “Skype”.
    • Click “Properties”.
    • On “Command:” replace the default command with: bash -c “LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so skype”

    Now every time you start Skype your video should work.

    Move grub from internal disk to external storage

    2 Comments

    When I installed Ubuntu Linux on my USB 8GB stick I didn’t noticed where grub was being installed. After a while I noticed that I could only boot my Windows installation (on the internal hard drive) via the USB 8GB stick.

    What happened was that Ubuntu install changed the master boot record (MBR) of my internal drive and set it up to load the remaining of Grub (it is split in 2 because otherwise it wouldn’t fit on the MBR) from the USB storage.

    To fix this I could use the Windows tools (fixmbr) but that requires me to boot using the recovery console and login as system administrator. Although using fixmbr would restore the Windows boot loader it would erase grub and make the USB storage  not bootable.

    What worked for me was MbrFix from sysint (www.sysint.no). REMARK: following the instructions below might make your computer unusable and eventually make you lose data.

    First I got the list of partitions on my internal disk:

    C:\>MbrFix.exe /drive 0 listpartitions
    # Boot Size (MB) Type
    1 Yes     76316    7  NTFS or HPFS
    2             0    0  None
    3             0    0  None
    4             0    0  None

    Next I saved my internal disk mbr to a file:

    C:\>MbrFix.exe /drive 0 savembr Backup_MBR_0.bin

    Next I listed my partitions on my USB disk drive:

    C:\>MbrFix.exe /drive 1 listpartitions
    # Boot Size (MB) Type
    1          6440  131  Linux native (usually ext2fs)
    2          1223  130  Prime
    3             0    0  None
    4             0    0  None

    Now I want to put grub on my USB disk:

    C:\>MbrFix.exe /drive 1 restorembr Backup_MBR_0.bin
    You are about to Restore MBR,
    are you sure (Y/N)? Y

    Now let’s see how the partition looks like:

    C:\>MbrFix.exe /drive 1 listpartitions
    # Boot Size (MB) Type
    1 Yes     76316    7  NTFS or HPFS
    2             0    0  None
    3             0    0  None
    4             0    0  None

    Ups! what happened there? My Linux partitions are gone… Let me try and fix this…

    C:\>MbrFix.exe /drive 1 /partition 1 setpartitiontype 131
    You are about to Set partition type,
    are you sure (Y/N)? Y
    Partition 1, type before: 7 NTFS or HPFS
    Partition 1, type after: 131 Linux native (usually ext2fs)
    
    C:\>MbrFix.exe /drive 1 /partition 2 setpartitiontype 130
    You are about to Set partition type,
    are you sure (Y/N)? Y
    Partition 2, type before: 0 None
    Partition 2, type after: 130 Prime
    
    C:\>MbrFix.exe /drive 1 listpartitions
    # Boot Size (MB) Type
    1 Yes     76316  131  Linux native (usually ext2fs)
    2             0  130  Prime
    3             0    0  None
    4             0    0  None

    Looks like by setting the partition types back to their original values solved the problem.. yes it did.. ufff…

    Now let’s restore the original Windows boot loader on the internal disk:

    C:\Documents and Settings\machados\My Documents\Downloads>MbrFix.exe /drive 0 fixmbr
    You are about to Fix MBR,
    are you sure (Y/N)? Y

    Now I could boot the system without the USB disk connected to my laptop.

    I could also boot my Linux system by connected the USB disk and selecting “boot from usb storage” from my bios boot menu.

    Installing VirtualBox additional tools on Ubuntu 9.10 Karmic Koala

    2 Comments

    This procedure was tested on VirtualBox 3.0.12 for Windows and Ubuntu 9.10 Server 32 bit as Guest.

    To be able to enjoy seamless integration between the host operating system and the VirtualBox guest you have to install VirtualBox Additional Tools on the guest operating system.

    To do so, follow the steps:

    Ensure you have a working Internet connection.

    Step 1:

    Install requirements for the Additional Tools:

    sudo apt-get install gcc linux-source-virtual linux-headers-virtual dkms
    

    Reboot after installation.

    Step 2:

    After logging in again find the Install Additional Tools option on the Devices menu.

    Then on your guest mount the cdrom:

    sudo mount /media/cdrom
    

    Step 3:

    Now install the tools:

    cd /media/cdrom
    ./VBoxLinuxAdditions-x86.run

    This will install the additional tools for virtual box.

    Reboot your system and you’re all set.

    Linux: mirroring my usb installation for more space

    No Comments

    I recently installed Ubuntu 9.10 Beta on a 4GB USB drive and was running my laptop from it. Although the Ubuntu default installation from the Live CD took less than the same installation from Fedora 12 I quickly found that I needed more space for the system (/home included). So I needed to move the system to a larger USB drive. This article explains how I moved my system from a 4GB USB drive to a 8GB USB drive including partition resizing.

    My laptop has 2 limitations. One, it doesn’t have a CD-ROM drive. Second, it only has 3 USB ports. I got a Pioneer DVR-XD09 external hard drive. This drive takes 2 USB ports because of power requirements and that means that if I boot from the live CD I only have 2 remaining port for other external drive.

    So I did the following:

    Step 1:

    Boot from the 4GB USB installation. Install gparted using Ubuntu Software Center from Applications menu.

    Delete any partition  existing on the 8GB USB drive using gparted. Make sure you select the correct drive.

    Step 2:

    Boot Ubuntu Live CD 9.10.

    Step 3:

    Mount the internal hard drive. It has enough space for an image of the USB installation.

    Step 4:

    Plug in the USB where the system is installed (4GB) . Unmount it.

    Step 5:

    Make an image to the internal harddrive with the dd command:

    dd if=/dev/sdc/ of=/media/internal_drive/ubuntu-image

    Step 6:

    Unplug the 4GB USB drive. Plug in the 8GB USB drive. Unmount it.

    Step 7:

    Copy the Ubuntu image to the 8GB USB drive using dd:

    dd if=/media/internal_drive/ubuntu-image of=/dev/sdc

    Step 8:

    Boot the system from the 4GB USB drive.

    Plug the 8GB drive. Using gpartd remove the swap drive on the 8GB drive.

    Use uuidgen and tune2fs to change the uuid of the root partition on the 8GB drive:

    $ sudo -i

    # uuidgen
    0b2eaab8-fddb-41fc-85f9-12ff421ce984

    # tune2fs -U 0b2eaab8-fddb-41fc-85f9-12ff421ce984 /dev/sdc1

    Step 9:

    Open gparted (or click Refresh Devices from GParted menu if you didn’t close GParted on last step).

    Select the 8GB device. Select partition 1 (/dev/sdc1 in my ca.se). Press the mouse right button and select resize/move.

    Drag the right edge of the partition until your happy with the free space for the swap partition. I left 1.20 GiB for the swap partition.

    Right-click the unallocated space and select New.

    On File System select linux-swap and press Add.

    Back to GParted main window Apply the changes.

    Close GParted.

    Step 10:

    Mount the new root partition using the Ubuntu Places menu.

    On a terminal window change to the etc folder on that partition:

    $ sudo -i

    # cd /media/0b2eaab8-fddb-41fc-85f9-12ff421ce984/etc/

    Check the previous UUID values on fstab:

    # cat fstab | grep UUID=
    # for a device; this may be used with UUID= as a more robust way to name
    UUID=4c557514-3b1e-47b2-ad53-475e26f0e520 / ext4 errors=remount-ro 0 1
    UUID=1042ef8e-bcf0-4890-a5b0-fe24a1aec625 none swap sw 0 0

    Backup your fstab:

    # cp fstab fstab.old

    Get the new values:

    # blkid /dev/sdc1
    /dev/sdc1: UUID=”0b2eaab8-fddb-41fc-85f9-12ff421ce984″ TYPE=”ext4″
    # blkid /dev/sdc2
    /dev/sdc2: UUID=”d8989008-f39c-42f4-81ad-5c1a70c8b3c9″ TYPE=”swap”

    Replace the old values for the new ones:

    # sed ‘s/4c557514-3b1e-47b2-ad53-475e26f0e520/0b2eaab8-fddb-41fc-85f9-12ff421ce984/’ fstab.old > fstab

    # sed ‘s/1042ef8e-bcf0-4890-a5b0-fe24a1aec625/d8989008-f39c-42f4-81ad-5c1a70c8b3c9/’ fstab > fstab.new

    Now your fstab should have the new values:

    # cat fstab | grep UUID=
    # for a device; this may be used with UUID= as a more robust way to name
    UUID=0b2eaab8-fddb-41fc-85f9-12ff421ce984 / ext4 errors=remount-ro 0 1
    UUID=d8989008-f39c-42f4-81ad-5c1a70c8b3c9 none swap sw 0 0

    Step 11:

    Now you need to install GRUB on the 8GB USB drive.

    First, the UUID of the root partition needs to be corrected also:

    # cd ../boot/grub

    # cp grub.cfg grub.cfg.old

    # sed ‘s/4c557514-3b1e-47b2-ad53-475e26f0e520/0b2eaab8-fddb-41fc-85f9-12ff421ce984/’ grub.cfg.old > grub.cfg

    Install grub on 8GB USB device:

    First check if sdc is on device.map:

    # cat device.map
    (hd0) /dev/sda
    (hd1) /dev/sdb

    Add the missing device:

    # echo “(hd2) /dev/sdc” >> device.map

    # grub-setup -d ./ -r ‘(hd1,1)’ -m ./device.map ‘(hd2)’

    # grub-install –root-directory=/media/0b2eaab8-fddb-41fc-85f9-12ff421ce984/ /dev/sdc

    Step 12:

    Shutdown the system. Remove the 4GB drive and plugin the 8GB drive.

    Turn on the system.

    Now I have 50% of free space instead of the 5% I had before migrating my system from an 4GB USB drive to an 8GB  USB drive.

    # tune2fs -U 0b2eaab8-fddb-41fc-85f9-12ff421ce984 /dev/sdc1

    Bash: window size is too short, how do I change it?

    No Comments

    So I’m logged on to a Linux server using Bash shell over an ssh connection using Poderosa client.

    When I time a long command for some reason the cursor at some point moves over to the beginning of the same line overwriting the command and everything becomes a mess. This is specially annoying while typing something you would like to cut and paste on an email for example.

    So, what’s going on?

    Bash has a variable that reports the number of columns setup:

    $ echo $COLUMNS
    80

    Interesting, it is configured for 80 columns but my terminal window has 137 columns. Why is that?

    There’s a Bash setting that will adapt the window size after each command:

    checkwinsize
    If set, Bash checks the window size after each command and, if necessary, updates the values of LINES and COLUMNS.

    Let’s see what is it’s current value:

    $ shopt -p | grep checkwinsize
    shopt -u checkwinsize

    That means it is disabled… Let’s enable it:

    $ shopt -s checkwinsize

    Now it is enable. Let’s check the COLUMNS value now:

    $ echo $COLUMNS
    137

    Great!

    Changing the configuration of Redhat Cluster Manager

    No Comments

    The Redhat cluster manager uses a cluster configuration system (man ccs) which can be managed by the ccs_tool tool.

    To change the configuration file /etc/cluster/cluster.conf you have to follow the steps outlined below on the first node of your cluster:

    1. backup current cluster.conf
    2. copy /etc/cluster/cluster.conf to say /tmp/cluster.conf
    3. make the necessary changes to /tmp/cluster.conf
      1. Change also the config_version attribute of the cluster tag at line 2 increasing the value by 1.
    4. run ccs_tool with the update option:  ccs_tool update /tmp/cluster.conf
    5. if you’re using cman then run: cman_tool version -r <new config version>

    If you don’t do item 5. and you’re using cman then your nodes will not be able to rejoin the cluster. To recover do the following:

    1. On the first node run cman_tool version -r <new config version>.
    2. On the other nodes restart the cman service.
    3. Restart ccsd
    4. Start rgmanager

    Postfix Quick Reference

    No Comments

    These are the most usefull commands for Postfix queue management:

    Print a queue: postqueue -p

    Delete a message: postsuper -d <Queue ID>

    Delete all messages: postsuper -d ALL

    Display a message: postcat -q <Queue ID>

    Older Entries