Hard-link / home / myuser nella sua nuova posizione?

2

Ho spostato la mia home directory in una sottodirectory di una seconda unità (montata) usando usermod -d ... -m . Ora, molti programmi funzionano bene, ma alcuni (Dropbox, ecc.) No. Credo che questo sia dovuto al fatto che non esiste più alcuna directory / home / myuser, quindi i programmi che sono codificati per cercare non riescono.

Posso creare un collegamento fisico usando ln -d ? Sembra che gli hard link siano problematici e non sono nemmeno sicuro di poterli creare su dischi in ogni caso. Ma mi piacerebbe ottenere questo risolto presto.

    
posta Ari B. Friedman 19.05.2012 - 14:59

2 risposte

5

Gli hard link in generale non sono particolarmente problematici. Ma i link diretti alle directory sono, per questo motivo devi usare il flag -d per provare a crearne uno, e perché probabilmente non ci riuscirai ugualmente; il kernel è probabilmente configurato (o hardcoded, non sono sicuro) per proibirli.

Inoltre, come sospetti, non è possibile collegare in modo rigido qualsiasi su più volumi, quindi non sarà possibile collegare in modo permanente /home/myuser a una directory su una partizione diversa.

Esistono due tipi di link supportati dal comando ln - hard link e collegamenti diretti (chiamati anche link simbolici o symlinks ).

Un hard link a un file è il file . Quando crei un hard link, lo stai facendo in modo che un altro nome di file identifichi il file. File in un filesystem in stile Unix (come ext4 , che Ubuntu usa per impostazione predefinita) sono identificati in modo univoco dal loro inode numero . Quando un file ha più nomi, cioè più collegamenti fisici (o, possiamo dire, solo più collegamenti), continua ad esistere anche se uno o più di essi vengono cancellati, a condizione che ne rimanga almeno uno. (Quindi continua a esistere su disco fino a quando non viene più aperto da alcun processo.) Il nome della funzione di sistema di basso livello che esegue il lavoro di rm si chiama unlink per questo motivo.

Un link flessibile non è il file. È invece un tipo speciale di voce del file system che punta a un file in base alla posizione e al nome del file di destinazione. Se si elimina un file a cui fa riferimento un collegamento software, il collegamento software non provoca l'esistenza del file. Se elimini o sposti / rinomini un file puntato da un collegamento software, il collegamento software smette di funzionare per accedere al file e si dice che sia danneggiato.

I file di collegamento rigido tra volumi non funzionano perché un collegamento fisico è il file e deve trovarsi nel volume in cui i dati del file sono archiviati fisicamente.

Le directory di collegamento diretto (ovvero che hanno più di un nome corrispondente allo stesso inode di directory) sono generalmente una cattiva idea, ed è solitamente proibita, perché rende possibile interrompere le assunzioni di base (e ragionevoli) su come si comportano le directory . Ad esempio, supponiamo di trovarmi in una directory chiamata foo e I cd in una directory chiamata bar . Se i collegamenti hard di directory non sono consentiti, so che posso tornare a foo con cd .. . Ma se sono permessi i collegamenti hard di directory, bar potrebbe effettivamente essere un hard link verso una directory da qualche altra parte. Inoltre, e molto più seriamente, un hard link è il file , e un hard link a una directory è la directory, quindi può esserci ambiguità su quale directory sia realmente genitore di bar .

D'altra parte, i collegamenti software alle directory sono perfettamente consentiti. Una directory foo può contenere un link soft chiamato bar che si collega a una directory da qualche altra parte, ma questo non causa problemi perché è sempre chiaro cosa fare. È sempre chiaro perché c'è una risposta alla domanda in quale directory sono veramente? Quindi, quando stai trattando la presente directory di lavoro come il nome che hai usato per arrivarci , è il nome del collegamento simbolico. E quando hai bisogno di sapere in quale directory ti trovi veramente (ad esempio, per confrontare due percorsi diversi per vedere se sono uguali o uno risiede nell'altro), anche questo funziona.

Quindi puoi creare un link soft o un link simbolico, da /home/myuser alla nuova directory home . Per creare un collegamento software, usa ln -s target source . Non è necessario (e non dovrebbe) specificare il flag -d per creare un collegamento software di directory.

Questo potrebbe aiutare a migliorare il tuo problema. Potresti provarlo Ma sarebbe ancora meglio risolvere il problema stesso. Vi consiglio di pubblicare una nuova domanda per sapere come risolvere il problema di alcuni dei vostri programmi che non funzionano correttamente poiché avete migrato la vostra directory home in un'altra partizione (assumendo che sia quello che avete fatto). Assicurati di includere informazioni specifiche su tutti i programmi che hanno problemi, incluso il testo completo ed esatto di tutti i messaggi di errore, e anche una descrizione di esattamente quali modifiche hai apportato alla configurazione di Ubuntu che ha attivato questi problemi e il contenuto completo di < a href="http://manpages.ubuntu.com/manpages/precise/en/man5/fstab.5.html "> /etc/fstab e l'output di echo $USER $HOME . (Devi anche collegarti a questa domanda, in modo che le persone non rispondano dicendo di aggirare il problema semplicemente creando un collegamento simbolico.)

    
risposta data Eliah Kagan 19.05.2012 - 15:34
0

Non fare un collegamento fisico. Fai un collegamento simbolico. %codice%. Gli hard link possono causare problemi, specialmente quando si tratta di una directory.

    
risposta data Relish 31.05.2012 - 04:16

Leggi altre domande sui tag