Sponsored Content
Full Discussion: Access a File as a Device?
Top Forums UNIX for Advanced & Expert Users Access a File as a Device? Post 302621091 by mij on Monday 9th of April 2012 08:16:54 PM
Old 04-09-2012
I had the same question, and was surprised not to have found any explanation on the web, so thanks to Corona688 for revealing it has a very simple answer.

As a result I have put together a quick script to automate the process. It is a bit rough and the images I have only contain one partition so I have not been able to test it with anything beyond the first partition. If there is a problem it will be with the larger numbers exceeding the shell's maximum integer size (which is also why I could not do the calculations in awk, as it only seems to support signed longints).

It works fine for me though with single partition USB stick images up to 16GB. I have called it mount-img and the usage is:

Code:
mount-img <image-file> <partition-number> <mount-point>

Code:
#!/bin/sh

eval MI_IMAGE="$1"

if [ ! -e "$MI_IMAGE" ]; then
   echo "${0##*/}: No such file or directory"
   exit
elif [ -d "$MI_IMAGE" ]; then
   echo "$1: Is a directory"
   exit
elif [ ! "$2" ]; then
   echo "${0##*/}: partition number not specified"
   exit
elif [ ! "$2" -ge "1" 2>/dev/null ]; then
   echo "${0##*/}: invalid partition number"
   exit
fi

MI_PART=$(( $2 + 1 ))
MI_INFO=`/sbin/fdisk -ul "$MI_IMAGE" 2>/dev/null | grep -E "Sector size \(logical/physical\):|^$MI_IMAGE"`
MI_SECTOR="${MI_INFO#*: }"
MI_SECTOR="${MI_SECTOR%% bytes*}"

if [ "$MI_PART" -gt "`echo "$MI_INFO" | wc -l`" ]; then
   echo "${0##*/}: partition number too high"
   exit
elif [ ! "$3" ]; then
   echo "${0##*/}: mount point not specified"
   exit
elif [ ! -e "$3" ]; then
   echo "${0##*/}: mount point $3 does not exist"
   exit
elif [ ! -d "$3" ]; then
   echo "${0##*/}: mount point $3 is not a directory"
   exit
fi

MI_OPTS=`echo "$MI_INFO" | awk -v l="$MI_PART" 'NR==l {printf "%s/%s",$(NF-4),$(NF-3)}'`
MI_OFFSET=$(( ${MI_OPTS%/*} * $MI_SECTOR  ))
MI_LIMIT=$(( (${MI_OPTS#*/} - ${MI_OPTS%/*}) * $MI_SECTOR  ))
mount -o loop,offset=$MI_OFFSET,sizelimit=$MI_LIMIT "$1" "$3"

This User Gave Thanks to mij For This Post:
 

10 More Discussions You Might Find Interesting

1. Linux

Non exclusive sound device access!!

Hi, I was wondering if any of you guys know of way to make applications that use sound device on linux to access it in a "non-exclusive manner", the aim is to be able to use more than one application that requires the sound device. Thanks (0 Replies)
Discussion started by: andryk
0 Replies

2. Linux

attempt to access beyond end of device

Hi, we have running 8 box sles 9 cluster and on an nfs filesystem we have the problem which is grepped from /var/log/messages. Jun 8 13:40:46 qnclpx02 kernel: attempt to access beyond end of device Jun 8 13:40:46 qnclpx02 kernel: sdat: rw=0, want=8894615912, limit=314572800 Is there... (1 Reply)
Discussion started by: ortsvorsteher
1 Replies

3. UNIX for Dummies Questions & Answers

controll access to a device

Hello everyone, I write a program (Linux & Solaris) that will run as non-root user, but the program must have rw access to a device /dev/ipmi (on linux) or /dev/bmc (on solaris). What is the standard way of granting such access? Linux: chmod on /dev/ipmi ? suid root my program? Solaris:... (1 Reply)
Discussion started by: Pavel.Bures
1 Replies

4. Homework & Coursework Questions

The pseudo-device provides a “backdoor” for gaining root access for a particular user.

Problem statement. In this part of the assignment, delegates will create a pseudo-device and write a device driver for it. The pseudo-device provides a “backdoor” for gaining root access for a particular user. Instead of compiling the device driver into the kernel, delegate will create a module.... (1 Reply)
Discussion started by: nyjilgeorge1
1 Replies

5. OS X (Apple)

Not mounted, no-driver USB device in terminal (how to access?)

hi, i am on a quest to access and even mount if possible a drive on os x. there is no driver for the device, but it lists fine in the system profiler. can i access its location from the terminal? how? here is what i get on the system profiler: Speed: Up to 480 Mb/sec Manufacturer: SAMSUNG ... (3 Replies)
Discussion started by: sontarieh
3 Replies

6. UNIX for Advanced & Expert Users

How the user process can access the character device loaded by my module

I am trying to load into the kernel a system-call dynamically (without restarting the kernel and compailing it) in an attempt to (once in kernel mode) write to user process's memory. (I know there is a way to do this with the ptrace interface but it is not an option.) I know the only way to... (1 Reply)
Discussion started by: hopelessProgram
1 Replies

7. Cybersecurity

Can't access my device DJI Phantom 3 which uses UNIX. Need Help please!

Equipment: DJI Phantom 3 I have the root and passwords access, but I cannot find out how to access the equipment. There is a USB port going to a miniUSB that connects to the equipment, but on Windows is detecting the connection as being a Serial Port (COM3). I need some help in order to gain... (5 Replies)
Discussion started by: nobr3ga
5 Replies

8. Ubuntu

Cannot access or boot encrypted drive (gave up waiting for root device...)

I cannot access or boot from my C drive. I'm running Zorin 9 and the drive is a Samsung SSD. The disk was encrypted on install, and that has not given me any problems before. When I start the system it gets to the memory test page, and does not then load the password prompt, which it used to.... (1 Reply)
Discussion started by: David4321
1 Replies

9. UNIX for Dummies Questions & Answers

Exclusive access for few IPs to NTP device

How to provide a client exclusive access to the NTP device or NTP server. Example: 1. Configured md5 authentication for a subnet added below restriction line to the subnet as below in ntp.conf file. Also configured the keys and md5 authentication working . restrict 192.168.1.0 mask... (1 Reply)
Discussion started by: iqtan
1 Replies

10. HP-UX

Failed to open tape device /dev/rmt/0mn:Device busy (errno = 16)

Hi, Unable to make tape backup, please help. /opt/ignite/bin/make_tape_recovery -a /dev/rmt/?mn -I -v -m tar -x inc_entire=vg00 * Creating local directories for configuration files and archive. ======= 04/25/16 16:28:08 IST Started /opt/ignite/bin/make_tape_recovery. (Mon... (4 Replies)
Discussion started by: anuragr
4 Replies
SYSTEM(3)						     Linux Programmer's Manual							 SYSTEM(3)

NAME
system - execute a shell command SYNOPSIS
#include <stdlib.h> int system(const char *string); DESCRIPTION
system() executes a command specified in string by calling /bin/sh -c string, and returns after the command has been completed. During execution of the command, SIGCHLD will be blocked, and SIGINT and SIGQUIT will be ignored. RETURN VALUE
The value returned is -1 on error (e.g. fork failed), and the return status of the command otherwise. This latter return status is in the format specified in wait(2). Thus, the exit code of the command will be WEXITSTATUS(status). In case /bin/sh could not be executed, the exit status will be that of a command that does exit(127). If the value of string is NULL, system() returns nonzero if the shell is available, and zero if not. system() does not affect the wait status of any other children. CONFORMING TO
ANSI C, POSIX.2, BSD 4.3 NOTES
As mentioned, system() ignores SIGINT and SIGQUIT. This may make programs that call it from a loop uninterruptable, unless they take care themselves to check the exit status of the child. E.g. while(something) { int ret = system("foo"); if (WIFSIGNALED(ret) && (WTERMSIG(ret) == SIGINT || WTERMSIG(ret) == SIGQUIT)) break; } Do not use system() from a program with suid or sgid privileges, because strange values for some environment variables might be used to subvert system integrity. Use the exec(3) family of functions instead, but not execlp(3) or execvp(3). system() will not, in fact, work properly from programs with suid or sgid privileges on systems on which /bin/sh is bash version 2, since bash 2 drops privileges on startup. (Debian uses a modified bash which does not do this when invoked as sh.) The check for the availability of /bin/sh is not actually performed; it is always assumed to be available. ISO C specifies the check, but POSIX.2 specifies that the return shall always be non-zero, since a system without the shell is not conforming, and it is this that is implemented. It is possible for the shell command to return 127, so that code is not a sure indication that the execve() call failed. SEE ALSO
sh(1), signal(2), wait(2), exec(3) 2001-09-23 SYSTEM(3)
All times are GMT -4. The time now is 11:21 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy