Como posso ejetar automaticamente os volumes que não uso mais?

1

Eu tenho um volume (salvo como um pacote esparso criptografado) que uso periodicamente. Por razões de segurança, ele deve ser ejetado quando não estiver em uso. É claro que eu deveria fazer isso sozinho, e geralmente me lembro. Mas não sempre. Existe uma maneira automatizada de fazer isso como um backup para mim falível?

Talvez uma ação de pasta anexada a ele a ejete após um certo período de tempo (ou, melhor ainda, um certo período de tempo ocioso) ou a uma certa hora do dia?

Talvez uma maneira de ejetar automaticamente quando o computador dorme? Atualmente, ele ainda existe após o sono do computador. (Não quero usar logout porque há outros processos que quero continuar.)

GEdgar
fonte
11
Você tem um arquivo no volume aberto em um aplicativo enquanto "utiliza" o volume? Talvez apenas um cronjob / LaunchAgent tentando desmontar o volume a cada 15 '(e falhando enquanto um arquivo estiver aberto) funcionaria.
nohillside

Respostas:

1

Graças ao patrix, agora o tenho funcionando. Vou postar algo aqui para outras pessoas que desejam fazer isso no futuro.

Parece que cronjobnão é mais recomendado launchd. Foi a primeira vez que escrevi um agente de inicialização, por isso houve muitos erros antes de fazê-lo funcionar. Não consegui decifrar as mensagens de erro no log do sistema, mas pelo menos quando elas estavam lá, disseram que não estava funcionando.

Encontrei um tutorial para um agente de lançamento em robots.thoughbot.com . Algumas das maneiras que ele usa launchctlsão marcadas como "legadas" pela Apple, mas ainda funcionaram para mim na Sierra.

Aqui está o meu agente de lançamento plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.gae.umount1</string>
    <key>ProgramArguments</key>
    <array>
        <string>diskutil</string>
        <string>unmount</string>
        <string>force</string>
        <string>/Volumes/3D</string>
    </array>
    <key>StartInterval</key>
    <integer>10800</integer>
</dict>
</plist>

É suposto executar o comando Unix a diskutil unmount force /Volumes/3Dcada 10800 segundos (= 3 horas).

GEdgar
fonte
Adicionar o plist do LaunchAgent e o script que ele chama (se houver) seria ótimo, tanto para futuros visitantes quanto como uma oportunidade de obter mais olhos para revisar seu código (e fornecer feedback, se necessário).
nohillside
Apenas um pensamento ..... em vez de forçar uma desmontagem a cada três horas, você pode executar um script a cada 30 minutos que verifica se / var / SleepImage foi modificada e se fosse, em seguida, desmontar o volume. Isso significa que ele acabou de sair do modo de espera (o que significa que não há acesso) e você estaria limitado a uma janela de apenas 30 minutos. Por outro lado, se você estiver trabalhando por 3 horas e 1 minuto, ele não ejeta o volume clandestinamente.
Allan
O contador rígido é complicado de qualquer maneira. Se você começar a usar o volume 5 minutos antes da execução do agente, ele será ejetado mesmo quando você ainda estiver trabalhando com seu conteúdo
nohillside
0

Você pode achar útil o seguinte projeto: http://henri.shustak.org/tools/ejector

Shustak
fonte
11
Embora esse link possa responder à pergunta, é melhor incluir aqui as partes essenciais da resposta e fornecer o link para referência. As respostas somente para links podem se tornar inválidas se a página vinculada for alterada.
grg