1

Temat: Automatyczne mountowanie NTFS/FAT z prawami do zapisu

Witam,
chciałem zrobić automatyczne montowanie nośnika z dowolnym systemem plików tak aby zaraz po wpięciu był dostępny do odczytu/zapisu poprzez sambę. O ile nie stanowi to problemu w przypadku systemu pliku ext to w przypadku ntfs/fat nośnik montowany jest automatycznie z uprawnieniami 755 co uniemożliwia zapis przez sambę. W którym miejscu można zmienić domyślne prawa dostępu dla mountowanych systemów plików?
Z góry dzięki za jakieś wskazówki.

2

Odp: Automatyczne mountowanie NTFS/FAT z prawami do zapisu

http://eko.one.pl/?p=openwrt-hdd#montowanievfat

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

3 (edytowany przez psthmn 2012-12-12 22:21:33)

Odp: Automatyczne mountowanie NTFS/FAT z prawami do zapisu

Ok, ale chodzi o automatyczne montowanie. Tak aby po włożeniu nośnika niezależnie od systemu plików montował go jako /mnt/sda1 z odpowiednimi uprawnieniami. Przez /etc/config/fstab nie dało się tego ustawić, gdyż w momencie kiedy mam fstype na auto i dodaję do opcji umask=0000 przestaje montowac exty.
Gdzieś widziałem na forum openwrt modyfikacje skryptu hotplug ale to było dla kamikaze i nie bardzo wiedziałem gdzie to wsadzić w altitude adjustment.

4

Odp: Automatyczne mountowanie NTFS/FAT z prawami do zapisu

Jak masz auto to i tak nie możesz tych opcji podać, bo są one specyficzne dla danego systemu plików. Więc albo robisz to sobie przez  /etc/config/fstab i określasz system, albo robisz w /etc/hotplug.b/block sam skrypt, który rozpoznaje jaki jest system plików na dysku i montuje go z określonymi opcjami. Bo to co jest w openwrt w block-mount automatycznie woła po prostu mount bez podania żadnych opcji i nie przejmuje się jaki system tam jest - zrzuca na system wykrycie systemu.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

5

Odp: Automatyczne mountowanie NTFS/FAT z prawami do zapisu

Dzięki Cezary za podpowiedź, zmodyfikowałem skrypt /etc/hotplug.d/block/40-mount
Więcej informacji http://wiki.openwrt.org/doc/howto/writable_ntfs
i gotowy plik, może komuś się przyda.

#!/bin/sh
# Copyright (C) 2009-2012 OpenWrt.org
# Copyright (C) 2010 Vertical Communications
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#

. /lib/functions/block.sh

blkdev=`dirname $DEVPATH`
if [ `basename $blkdev` != "block" ]; then

    device=`basename $DEVPATH`
    mountpoint=`sed -ne "s|^[^ ]*/$device ||; T; s/ .*//p" /proc/self/mounts`

    case "$ACTION" in
    add)

        local from_fstab
        local anon_mount
        local anon_swap
        local anon_fsck
        local mds_mount_target
        local mds_mount_device
        local mds_mount_fstype
        local sds_swap_device
        local use_device
        local do_fsck=0
        local fsck_type
        
        local autoswap_from_fstab
        local automount_from_fstab

        mount_dev_section_cb() {
            mds_mount_target="$2"
            mds_mount_device="$3"
            mds_mount_fstype="$4"
            mds_mount_enabled="$6"
        }

        swap_dev_section_cb() { 
            sds_swap_device="$2"
            return 0
        }

        config_get_automount
        automount_from_fstab="$from_fstab"
        [ "$automount_from_fstab" -eq 1 ] && {
            config_get_mount_section_by_device "/dev/$device"
            use_device="$mds_mount_device"
            [ "$mds_mount_enabled" -eq 1 ] && {
                if [ -n "$mds_mount_target" ]; then
                    grep -q "/dev/$device" /proc/swaps || grep -q "/dev/$device" /proc/mounts || {
                        ( mkdir -p "$mds_mount_target" && mount "$mds_mount_target" ) 2>&1 | tee /proc/self/fd/2 | logger -t 'fstab'
                    }
                else
                    logger -t 'fstab' "Mount enabled for $mds_mount_device but it doesn't have a defined mountpoint (target)"
                fi
            }
        }

        [ -z "$use_device" ] && {
            config_get_autoswap
            autoswap_from_fstab="$from_fstab"
        
            [ "$autoswap_from_fstab" -eq 1 ] && {
                config_get_swap_section_by_device "/dev/$device"
                use_device="$sds_swap_device"
            }
        }
        
        # vfat & ntfs-3g check
        if [ `which blkid` ]; then
            isntfs=`blkid | grep $device | grep ntfs`
            isfuse=`lsmod | grep fuse`
            isntfs3g=`which ntfs-3g`
            isvfat=`blkid | grep $device | grep vfat`
        else
            isntfs=""
            isvfat=""
        fi
        
        grep -q "/dev/$device" /proc/swaps || grep -q "/dev/$device" /proc/mounts || {
            [ "$anon_mount" -eq 1 -a -z "$use_device" ] && {
                case "$device" in
                    mtdblock*) ;;
                    *)
                        # mount with ntfs-3g if possible, else with default mount
                        if [ "$isntfs" -a "$isfuse" -a "$isntfs3g" ]; then
                            ( mkdir -p /mnt/$device && ntfs-3g /dev/$device /mnt/$device ) 2>&1 | tee /proc/self/fd/2 | logger -t 'fstab'
                        elif [ "$isvfat" ]; then
                            ( mkdir -p /mnt/$device && mount -o umask=000 /dev/$device /mnt/$device ) 2>&1 | tee /proc/self/fd/2 | logger -t 'fstab'
                        else
                            ( mkdir -p /mnt/$device && mount /dev/$device /mnt/$device ) 2>&1 | tee /proc/self/fd/2 | logger -t 'fstab'
                        fi
                    ;;
                esac
            }
        }
        reset_dev_section_cb
        ;;
    remove)
        umount /dev/$device
        umount $mountpoint
        ;;
    esac    

fi