Показать полную графическую версию : Пропадает доступ к общей папке на съемном диске
Server 2003, есть съемный USB винт, на нем зашарена папка. Используется только для чтения. Кэширование отключено (т.е. по идее можно в любое время винт выдергивать - это же для этого настройка?). Если винт выдергивается и вставляется снова, общая папка перестает работать, т.е. она есть, показывается как общая, но при заходе через сеть даже с самого сервера проводник просто показывает пустую папку, т.е. даже ошибку не выдает. Спасает только перешаривание папки. Если делать "безопасное извлечение" винта, то вроде бы все нормально. Но делать это некому (т.е. приходит человек, выдергивает винт, вставляет новый и уходит, консольного логина у него нет). Вот чего бы такое придумать чтобы все работало само? Самозашаривающий авторан на винт не прокатит, его содержимое я не контролирую. Да и не сработает он без залогиненной консоли.
madmax24
18-01-2008, 09:14
Вот чего бы такое придумать »
А много народу проводят такую операцию? Может для облегчения своей жизни стоит просто один раз научить всех и показать как это делать, типа безопасное отключение? Нагнать страху, что мол если так делать не будите, то ОС рано или поздно свалится...
Нашел скрипт по раздаче прав на шару и каталог.
Настроить на сервере запуск (хоть каждую минуту) от имени LocalSystem (например, через АТ) или от администратора .CMD-шника, который будет проверять, работает ли шара:
rem предположим, что у нас расшаривается каталог d:\shared с именем shared
rem если шара видна - всё ok, ничего не делаем
if exists \\server\shared\*.* goto end
rem если локально ничего не видно, значит пустой каталог или нет диска, ничего не делаем
if NOT exists d:\shared\*.* goto end
rem пересоздаем шару
net share shared /delete
start ShareSetup.vbs
:end
Вот, собственно, сам скрипт - модифицировать по вкусу =)
'=======================================================
'=======================================================
'ShareSetup.vbs
'Author: Jonathan Warnken - jon.warnken@gmail.com
'Credits: parts of various other posted scripts used
'Requirements: Admin Rights
'Some Addition Lev Shumskii aka WildCat
'Now You may set SecurityDescriptor for NTFS
'and this script work properly under Win2k & Win2k3 t00
'=======================================================
Option Explicit
Const FILE_SHARE = 0
Const MAXIMUM_CONNECTIONS = 15
Const strDomain = "CohoVineYards.com"
Const PERM_READ = 1179817
Const PERM_MODIFY = 1245631
Const PERM_FULL = 2032127
Dim strComputer
Dim objWMIService
Dim objNewShare
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set objNewShare = objWMIService.Get("Win32_Share")
'Worked Example
Call sharesec ("C:\Robot", "Robot", "Only Security Department", "Security Department", Perm_Read, Perm_Modify)
Sub sharesec(Fname, shr, info, account, Share_Perm, NTFS_Perm)
Dim FSO
Dim Services
Dim SecDescClass
Dim SecDesc
Dim Trustee
Dim ACE
Dim Share
Dim InParam
Dim Network
Dim FolderName
Dim AdminServer
Dim ShareName
Dim FolderSecurity
Dim RetVal
Dim SecurityDescriptor
Dim User
FolderName = Fname
AdminServer = "\\" & strComputer
ShareName = shr
'Write New security descriptor for the FolderName
Set Services = GetObject("WINMGMTS:{impersonationLevel=impersonate,(Security)}!" & AdminServer & "\ROOT\CIMV2")
Set SecurityDescriptor = Services.Get("Win32_SecurityDescriptor")
Set FolderSecurity = GetObject("winmgmts:Win32_LogicalFileSecuritySetting.Path='" & FolderName & "'")
RetVal = FolderSecurity.GetSecurityDescriptor(SecurityDescriptor)
Set Trustee = SetGroupTrustee(strDomain, account) 'Use SetGroupTrustee for groups and SetAccountTrustee for users
Set ACE = Services.Get("Win32_Ace").SpawnInstance_
ACE.Properties_.Item("AccessMask") = NTFS_Perm
ACE.Properties_.Item("AceFlags") = 3
ACE.Properties_.Item("AceType") = 0
ACE.Properties_.Item("Trustee") = Trustee
SecurityDescriptor.Properties_.Item("DACL") = Array(ACE)
RetVal = FolderSecurity.SetSecurityDescriptor(SecurityDescriptor)
'Create new Share
Set Services = GetObject("WINMGMTS:{impersonationLevel=impersonate,(Security)}!" & AdminServer & "\ROOT\CIMV2")
Set SecDescClass = Services.Get("Win32_SecurityDescriptor")
Set SecDesc = SecDescClass.SpawnInstance_()
Set Trustee = SetGroupTrustee(strDomain, account) 'Use SetGroupTrustee for groups and SetAccountTrustee for users
Set ACE = Services.Get("Win32_Ace").SpawnInstance_
ACE.Properties_.Item("AccessMask") = Share_Perm
ACE.Properties_.Item("AceFlags") = 3
ACE.Properties_.Item("AceType") = 0
ACE.Properties_.Item("Trustee") = Trustee
SecDesc.Properties_.Item("DACL") = Array(ACE)
Set Share = Services.Get("Win32_Share")
Set InParam = Share.Methods_("Create").InParameters.SpawnInstance_()
InParam.Properties_.Item("Access") = SecDesc
InParam.Properties_.Item("Description") = Info
InParam.Properties_.Item("Name") = ShareName
InParam.Properties_.Item("Path") = FolderName
InParam.Properties_.Item("MaximumAllowed") = MAXIMUM_CONNECTIONS
InParam.Properties_.Item("Type") = 0
Share.ExecMethod_ "Create", InParam
End Sub
Function SetAccountTrustee(strDomain, strName)
Dim objTrustee
Dim account
Dim accountSID
set objTrustee = getObject("Winmgmts:{impersonationlevel=impersonate}!root/cimv2:Win32_Trustee").Spawninstance_
set account = getObject("Winmgmts:{impersonationlevel=impersonate}!root/cimv2:Win32_Account.Name='" & strName & "',Domain='" & strDomain &"'")
set accountSID = getObject("Winmgmts:{impersonationlevel=impersonate}!root/cimv2:Win32_SID.SID='" & account.SID &"'")
objTrustee.Domain = strDomain
objTrustee.Name = strName
objTrustee.Properties_.item("SID") = accountSID.BinaryRepresentation
set accountSID = nothing
set account = nothing
set SetAccountTrustee = objTrustee
End Function
Function SetGroupTrustee(strDomain, strName)
Dim objTrustee
Dim account
Dim accountSID
set objTrustee = getObject("Winmgmts:{impersonationlevel=impersonate}!root/cimv2:Win32_Trustee").Spawninstance_
set account = getObject("Winmgmts:{impersonationlevel=impersonate}!root/cimv2:Win32_Group.Name='" & strName & "',Domain='" & strDomain &"'")
set accountSID = getObject("Winmgmts:{impersonationlevel=impersonate}!root/cimv2:Win32_SID.SID='" & account.SID &"'")
objTrustee.Domain = strDomain
objTrustee.Name = strName
objTrustee.Properties_.item("SID") = accountSID.BinaryRepresentation
set accountSID = nothing
set account = nothing
set SetGroupTrustee = objTrustee
End Function
Если делать "безопасное извлечение" винта, то вроде бы все нормально »
Насколько помню, если сделать "Safely remove hardware", то шара(ы) автоматически удаляются и заново не появляются (кроме системных, типа Q$), так что проблемка та еще. Сделать запуск проверки по виндовому планировщику - идея интересная и возможно, что единственно разумная, тем более что я сразу после установки винды убиваю все автозапуски.
В настоящий момент практикую смену 2х бэкапных хардов несколько раз в неделю, шару восстанавливаю батником, правда запускаю ручками. Единственное - бывает, что валятся точки монтирования хардов, поэтому временами приходится перезагружать комп, чтобы коректно подцеплялся хард.
Для пояснения: 1й хард монтируется в папку D:\Mount\BackUp0, а 2й - в D:\Mount\BackUp1, сама шара - "BackUp", права - только доменным админам.
@Echo Off
net share BackUp /delete
set N=~
for %%n in (0 1) do if exist "D:\Mount\BackUp%%n\System Volume Information" Set N=%%n
If %N%==~ GoTo Nothing
net share BackUp=D:\Mount\BackUp%N%
Echo Y | cacls BackUp%N% /T /C /G "domain admins":F
GoTo End
:Nothing
Echo NOTHING TO SHARE!!!
pause>nul
:End
Насколько помню, если сделать "Safely remove hardware", то шара(ы) автоматически удаляются и заново не появляются (кроме системных, типа Q$), так что проблемка та еще. »
Да нет, все нормально появляется. Только пока к шаре подключены пользователи винт не отключается (причем без комментариев, жмешь "Безопасное отключение" - никакого эффекта).
Тогда другой вопрос: как дать пользователю право на перезашаривание папки? В XP я делаю задание планировщика с сохраненным паролем админа и пользователь запускает его батником через schtasks. В сервере на schtasks у пользователей прав нету :cry:
Тогда другой вопрос: как дать пользователю право на перезашаривание папки? В XP я делаю задание планировщика с сохраненным паролем админа и пользователь запускает его батником через schtasks. В сервере на schtasks у пользователей прав нету »
Уточнения:
1. USB-Диск подключается именно на сервер и посторонним челом, которому админские права неположены.
2. Диск всегда один, требуется для работы какой-то проги на серваке и изменить точку монтирования нельзя! Или можно?!! т.е. допустим он всегда монтируется как "E:", но можно и поменять букву, т.к. диск служит только для расшаривания данных группе пользователей, к примеру "\\OurSvr\UpDatedBase\"
3. Диск должен быть доступен в сети практически мгновенно после его физического подключения.
Главный вопрос - жесткая привязка точки монтирования - буква диска. Если на серваке нет никакой проги, у которой стоит привязка к конкретному каталогу на этом съемном диске, или же прогу МОЖНО настроить на другой путь к данным, то рекомендую сделать так:
На каком-нить несъемном диске сервака (но желательно не на "С:") создать каталог, к примеру "D:\USB_Disk" и расшарить его под старым именем, в него смонтировать этот самый диск (правой "My Computer" => "Manage" => "Disk Management" => выбираем USB устройство, правой кнопкой "Change Drive Letter & Paths" => "Change" => "Mount in the following empty NTFS folder" => выбираем тот самый каталог.
Теперь при подключении диска к серваку (если он автоматически найдется) диск мгновенно окажется доступен по сети. Без подключенного диска шара также останется доступна, но! Обращение к ней будет давать ошибку! Это в принципе не страшно - достаточно один раз объяснить пользователям, что такая ошибка означает, что диск не подключен.
И вся проблема. :)
NiOl, Да, про монтирование в папку я уже думал, проблема в том что винт не один, т.е. просто меняется один на другой. Надо выяснить, если их всего два то смонтировать оба в одну папку.
И еще, зашаривать нужно не диск целиком, а папку в корне диска, т.е. "монтировочную" папку на стационарном диске зашарить не получится, а с вложенной папкой, подключаемой на ходу, есть подозрения что будет точно такая же история. Экспериментировать не могу, т.к. сервером управляю через RDP, а команды "выдернуть USB шнур и вставить обратно" там нету :unsure:
Тогда только батник, запускаемый на серваке по заданию (твоему) хоть каждые 5 минут. Батник должен проверять доступность шары, и если ее нет, то пытаться подключить. Для Win`03 calcs.exe выполнять нет нужды, права прекрасно прописываются прямо в net share ключем "grand" (кажется). Если будет проблема написать батник - пиши, поможем.
зы: за исходник можешь взять мой батник, но в нем критичный минус для твоей системы - он не проверяет наличия уже созданной шары, а убивает ее и пытается создать заново. Для моего случая это нормально - доступ к шаре осуществляется только ночью, а запуск батника - мной, в ручном режиме.
Пробовал монтировать в папку, зашаривать диск целиком, зашаривать "монтировочную" папку на локальном диске - пофигу. :angry2: Если открыты файлы на шаре при отключении диска - после подключения шара не работает. Чего-то там служба сервера все-таки кэширует, зараза.
Короче, написал батник:
:m1
if exist \\server\sharedfolder\somefile (
timeout 60 /nobreak
goto m1
)
net share sharedfolder /delete /y
:m2
if not exist g:\sharedfolder\somefile (
timeout 5 /nobreak
goto m2
)
net share sharedfolder=g:\sharedfolder
timeout 10 /nobreak
goto m1
и запускаю его планировщиком по будним дням с 9 до 17.
Изврат, конечно...
panda34,
net stop server
net start server
Будет достаточно после подключения винта заново. Пользователю можно дать права на рестарт службы "Сервер".
:o
Ну изврат разве что держать батник перманентно запущеным... (пусть даже 9 и до 17). Я бы лучше запускал "разово", но каждые минут 5 - т.к. если вылетит с ошибкой - через несколько минут будет повторный запуск + иногда cmd ресурсы кушает, а для сервака это нежелательно.
Совсем неучел момент открытых файлов. Дествительно, пользователи часто что-нить наоткрывают и бросают комп залоченным... надо подумать. В любом случае рекомендациями тов. "monkkey" я бы пользоваться не стал, если этот диск не единственная шара в системе, т.к. отключаться будет все! А это в большинстве случаев недопустимо.
Такой вопрос - данные на этой шаре только для чтения? Может организовать сонхронизацию данных на несъемный диск? Т.е. "Курьер" привез диск, и запустилась синхронизация (в ждущем режиме, по аналогичному батнику). Тогда с шарой проблем не будет вообще, а вопрос переедет в разряд выбора способа синхронизации. (если данные правятся то о копии не может быть и речи)
monkkey,
А че будет делать бухгалтерия, отдел кадров, работающие в 1С-е, 30 пользователей, открывающие файлы из общих папок, задания по backupу с пользовательских машин на сервер :clapping:
Можно вообще сервак перегрузить - и прав никаких не надо давать, знай, жми себе reset. :)
NiOl, каждые 5 минут, я потом буду с логами планировщика два дня разбираться (там много чего напихано), а чему там с ошибкой вылетать-то? Ето ж bat файл. :o И какие там ресурсы cmd жрать может, в консольном окошке? Task manager у меня показывает Gui: 0, User: 0. Сливать на локальный диск не прокатит, там USB 1.1 и гиг 15 данных.
А точно net share sharedfolder /delete /y не отключает пользователей?
Я пытался воспроизвести такое на работе (правда тестовая шара была на XP) и ничего - сохраняемые на шару файлы улетали только в путь, шара отключалась...
Есть еще длинный вариант, но 1. надежность срабатывания никакая 2. нужно взять в руки какое-нить средство программирования:
net file дает список открытых файлов, нужно выбрать оттуда строки, содержащие путь шары и составить список IDшников
net file ID /close закрывает указанный по номеру файл...
Как ты понимаешь, пока список составляется и закрываются файлы, пользователи могу успеть наоткрывать еще десяток...
а 11 гигов инфы - всегда разной или "обновляемой"? Ведь 1 раз переписать, а потом обновлять - недолго. Вдобавок подключать можно к какой-нить WS с USB 2.0 и обновлять по сети...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.