Page 4 of 16 FirstFirst ... 2345614 ... LastLast
Results 46 to 60 of 230

Thread: Как зафиксировать порядок USB носителей (fstab)?

  1. #46
    Join Date
    Feb 2007
    Location
    Moscow, Russia
    Posts
    3,805
    как жестко прописать их монтирование на роутере?
    никак. Но можно сделать генерацию fstab при загрузке. Примерно так:
    http://wl500g.info/showpost.php?p=79119&postcount=249
    http://www.wl500g.info/showpost.php?p=80436&postcount=3
    http://wl500g.info/showthread.php?t=18485

  2. #47
    А можно попросить вариант скрипта для моего случая?

    Имеется USB-flash с двумя разделами. Один swap монтируется в /swap.
    Второй ext2 монтируется в /opt

    Винт имеет один раздел, монтируется в /userdata
    DIXI

  3. #48
    alien, а чем плох тот скрипт, что выше? Который "со свопом"?
    Только в hdd_guid вписать GUID от флешки, а в flash_guid - GUID от винчестера. Точки монтирования отредактировать вроде несложно.

    З.Ы. Ради эстетики можно напрячься и поменять имена переменных самостоятельно.

    З.З.Ы. Это плохая идея: своп на флешке, особенно если есть винт.

  4. #49
    Quote Originally Posted by bbsc View Post
    alien, а чем плох тот скрипт, что выше? Который "со свопом"?
    Только в hdd_guid вписать GUID от флешки, а в flash_guid - GUID от винчестера. Точки монтирования отредактировать вроде несложно.

    З.З.Ы. Это плохая идея: своп на флешке, особенно если есть винт.
    Да, про поменять GUID не подумал)

    По свопу - винт "потаскун". Я посчитал, что не будет хорошо неожиданно лишать роутер свопа. А флешка там навсегда поселилась. Сдохнет - вживим другую)
    DIXI

  5. #50
    Join Date
    Aug 2008
    Location
    Taganrog, Rostov Region
    Posts
    397
    Quote Originally Posted by alien View Post
    Да, про поменять GUID не подумал)

    По свопу - винт "потаскун". Я посчитал, что не будет хорошо неожиданно лишать роутер свопа. А флешка там навсегда поселилась. Сдохнет - вживим другую)
    Так посели swap на отдельную флешку.
    Обидно будет, когда сдохнет флешка с настроенныем софтом.

    PS: может мне не повезло с флешкой. Я тоже хотел поместить opt и swap на одну флешку. Так после установки некоторого колличества пакетов - все рушилось. После переноса swap на винт, все стало работать.
    [ASUS wl-500gP (v1) 1.9.2.7-rtn-r7438M 128Mb 300MHz 2+2usb] + [2Гб USBFlash] + [USB-HDD] + [xinetd] + [samba3] + [Download Engine] + [rTorrent] + [3proxy] + [nShaper] + [mcabber] + [apcupsd] + [mpd]; Было: [openvpn&udhcpc]; [privoxy] + [polipo];

  6. #51
    Quote Originally Posted by igor77777 View Post
    Так посели swap на отдельную флешку.
    Две флешки + винт... Не знаю. Не намерен ставить много софта, торрент клиент пожалуй и всё. Можно сделать бэкап.
    DIXI

  7. #52
    Quote Originally Posted by bbsc View Post
    AlekseyA, да как запустить....

    Запустить файл на исполнение:
    /opt/tmp/vasya

    .
    А у меня почему то на попытку запуска отвечает что файл не найден. Хотя я его вижу и могу открывать для редактирования.
    Что не так?

  8. #53
    Вывод с консоли в студию.

  9. #54
    Quote Originally Posted by bbsc View Post
    Вывод с консоли в студию.
    [.......@.... root]$ /opt/tmp/startUSB
    -sh: /opt/tmp/startUSB: not found

  10. #55
    Угу, а что говорит ls -al /opt/tmp ?

  11. #56
    Quote Originally Posted by bbsc View Post
    Угу, а что говорит ls -al /opt/tmp ?
    [...@... root]$ ls -al /opt/tmp
    drwxr-xr-x 3 ... root 4096 Jun 5 15:44 .
    drwxr-xr-x 18 ... root 4096 Jun 5 15:33 ..
    drwxr-xr-x 2 ... root 4096 Apr 22 00:01 ipkg
    -rwxr-xr-x 1 ... root 850 Jun 5 15:47 startUSB

  12. #57
    vladniktep, не знаю. Возможно, пробел в конце имени файла.

  13. #58

    Алтернативный вариант монтирования

    Сделал скрипт, которым подменяю /sbin/hotplug.
    По пунктам:
    1. Когда происходит событие подключения/отключения железа, например usb девайса, ядро смотрит в некоторую внутреннюю переменную, и если там есть путь к исполняемому файлу, то запускает этот файл, передавая ему в переменных окружения данные о происшедшем событии.
    2. Данная переменная экспортируется через /proc/sys/kernel/hotplug Туда можно писать пути к нашим файлам. По умолчанию туда прописан путь /sbin/hotplug
    3. Идея в том, чтобы для интересующих нас событий выполнялся наш скрипт, а для всех остальных - бинарный файл из прошивки. После изучения исходников прошивочного варианта у меня сложисломь впечатление, что никакого особенного разума там нет. Но для совместимости с будущими версиями прошивок, где этот разум может появиться, я запускаю на исполнение прошивочный вариант.
    4. Я разложил всё на три куска: файл /usr/local/sbin/hotplug - собственно парсер событий и конфигурации, файл настроек /ets/usbmassplug.conf и добавка в скрипт /usr/local/sbin/post-boot, которая прописывает путь к нашему скрипту в переменную ядра.
    5. После добавления файла /ets/usbmassplug.conf не забываем его дописать в /usr/local/.files

    Содержимое файлов - отдельным постом.

  14. #59

    Алтернативный вариант монтирования: hotplug

    Code:
    #!/bin/sh
    SYSHOTPLUG=/sbin/hotplug
    DEVICES=/proc/bus/usb/devices
    
    #mkdir -p /tmp/debug/
    #echo "======================================="  >> /tmp/debug/hotplug.log
    #date  >> /tmp/debug/hotplug.log
    # We process hotplugging for usb only
    if [ "$1" != "usb" ]; then
        #echo "Not an usb event: $1" >> /tmp/debug/hotplug.log
        exec $SYSHOTPLUG;
    fi
    
    # INTERFACE  we are going to process is 8 for mass storage and 6 for SCSI
    if [ "$INTERFACE" != "8/6/80" ]; then
        #echo "Not a mass-storage event: $INTERFACE" >> /tmp/debug/hotplug.log
        exec $SYSHOTPLUG;
    fi
    
    # We process only addition
    if [ "$ACTION" != "add" ]; then
        #echo "Not an add event: $ACTION" >> /tmp/debug/hotplug.log
        exec $SYSHOTPLUG;
    fi
    
    # Sleep a little to let device to settle
    sleep 1
    # Now we are going to construct `Bus:' string to match in
    # /proc/scsi/usb-storage-X/X. Thus we will now what device initiated event
    # After split Bus=fds[3], Level=fds[5], Parent=fds[7], Port=fds[9] and
    # DeviceId=fds[13]. Lines array indexed by strings bus/devid with values
    # level/port/parent.
    cat $DEVICES | awk '/^T:/ {
        split($0,fds,/[ =\t\n]+/);
        lines[sprintf("%d/%d",fds[3],fds[13])]=sprintf("%d/%d/%d",fds[5],fds[9],fds[7])
    } 
    END {
        split(ENVIRON["DEVICE"],dvals,"/");
        rbus=dvals[5];dnum=dvals[6];
        tlvl=0;
        do {
            if(!sprintf("%d/%d",rbus,dnum) in lines)
                exit 1;
            split(lines[sprintf("%d/%d",rbus,dnum)],lvals,"/");
            ++tlvl;
            ports[tlvl]=lvals[2];
            clvl=lvals[1];
            dnum=lvasl[3]
        }while(clvl>1);
        res=sprintf("Bus: 01:%02d.2-%d",rbus,ports[tlvl]+1);
        for(i=tlvl-1;i>0;--i)
            res=sprintf("%s.%d",res,ports[i]+1);
        #print "USB:",res >> "/tmp/debug/hotplug.log";
        hostnum=-1;
        for(i=0;i<4 && hostnum==-1;++i) {
            file=sprintf("/proc/scsi/usb-storage-%d/%d",i,i);
            #print "Processing file:",file >> "/tmp/debug/hotplug.log";
            while(0 < getline ums < file) {
                #print "\tLooking in string:",ums >> "/tmp/debug/hotplug.log";
                if(index(ums,"GUID:")) {
                    split(ums,gid," ");
                    guid=gid[2];
                }
                if(index(ums,res)) {
                    hostnum=i;
                    break;
                }
            }
        }
        #print "Host number",hostnum,"GIUD:",guid >> "/tmp/debug/hotplug.log";
        if(hostnum==-1)
            exit 0;
        guidstr=sprintf("^GUID:%s",guid);
        #print "Looking for: ",guidstr >> "/tmp/debug/hotplug.log";
        while(0 < getline conf < "/etc/usbmassplug.conf") {
            #print "Processing:",conf >> "/tmp/debug/hotplug.log";
            if(conf ~ guidstr) {
                #print "Found match!" >> "/tmp/debug/hotplug.log";
                split(conf,mp," ");
                if(mp[3]=="swap") {
                    #printf("swapon /dev/scsi/host%d/bus0/target0/lun0/part%d\n",hostnum,mp[2]) >> "/tmp/debug/hotplug.log";
                    system(sprintf("swapon /dev/scsi/host%d/bus0/target0/lun0/part%d",hostnum,mp[2]));
                } else {
                    #printf("mount -t %s -o %s /dev/scsi/host%d/bus0/target0/lun0/part%d %s\n",mp[4],mp[5],hostnum,mp[2],mp[3]) >> "/tmp/debug/hotplug.log";
                    system(sprintf("mount -t %s -o %s /dev/scsi/host%d/bus0/target0/lun0/part%d %s",mp[4],mp[5],hostnum,mp[2],mp[3]));
                }
            }
        }
    }'
    В аттаче - архив, в котором дебаг местами раскомментирован. Для удобства.

    Пояснения: по большей части поведение скрипта объяснено в комментариях. Скрипт парсит /proc/bus/usb/devices, восстанавливает по этому файлу топологию подключения девайсов, находит точку подключения для девайса, сгенерировавшего событие и ищет среди mass-storage девайсов свеже подключённого. После этого вынимает из конфигурации все точки монтирования и выполняет mount и swapon.
    Attached Files Attached Files

  15. #60

    Алтернативный вариант монтирования: usbmassplug.conf и post-boot

    Интересующие строчки в /usr/local/sbin/post-boot выглядят следующим образом:
    Code:
    # make sure mass-storage modules loaded
    insmod scsi_mod
    insmod sd_mod
    insmod usb-storage
    # redirect mass-storage addition to our script
    echo "/usr/local/sbin/hotplug" > /proc/sys/kernel/hotplug
    Файл конфигурации /etc/usbmassplug.conf выглядит следующим образом:
    Code:
    # Add lines in following format:
    # GUID:guid part_num mount_point type options
    # guid is value from string GUID: from /proc/scsi/usb-storage-X/X
    # part_num is a number of partition starting with 1
    # mount_point is mount point dir or special value `swap'
    # type is filesystem type (for swap mount points is ignored)
    # options are mount options as passed to mount (ignored for swap)
    GUID:152d232900005e07ffffffff 1 /mnt ext3 rw,noatime
    GUID:058f63870000000195631602 1 /opt ext3 rw,noatime
    GUID:058f63870000000195631602 2 swap
    Вольный перевод: формат строчек следующий
    GUID:идентификатор_устройства номер_части точка_монтирования тип_системы параметры
    идентификатор_устройства читаем для наших устройств из файлов /proc/scsi/usb-storage-X/X в строчке, начинающейся с GUID:
    номер_части - номер раздела на нашем устройстве, начиная с единицы
    точка_монтирования - путь к дирректории или специальное значение swap для своп разделов
    тип_системы - тип файловой системы, например ext3
    параметры - параметры монтирования, например rw,noatime
    Для своп разделов тип_системы и параметры игнорируются

Page 4 of 16 FirstFirst ... 2345614 ... LastLast

Similar Threads

  1. Настройка mpcs на роутере
    By poptab in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 1059
    Last Post: 17-07-2012, 06:22
  2. cannot detect USB HDD
    By ferdz_33 in forum WL-500gP Q&A
    Replies: 8
    Last Post: 13-01-2010, 07:53
  3. Проблема: USB 1.1 устройства через USB 2.0 хаб
    By Rambalac in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 30
    Last Post: 15-09-2009, 12:00

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •