OneDrive «File su richiesta» e le applicazioni aziendali — le ipotesi che i segnaposto spezzano e come affrontarle

· · OneDrive, File su richiesta, KFM, Windows, Applicazioni aziendali, Archiviazione cloud, File system, Risoluzione dei problemi, Sistemi informativi

«Un’app aziendale non legge un CSV salvato sul desktop.» «Un’importazione che funzionava fallisce con “file non trovato” dopo la sostituzione del PC.» «Esplora risorse mostra il file, ma aprirlo dall’app dà errore.» — Negli ultimi anni questo tipo di consultazione dai clienti è diventato un classico.

Quando si indaga, la causa spesso non è un bug dell’app ma il «backup automatico di Desktop e Documenti» di OneDrive (Known Folder Move, KFM) e «File su richiesta». Il vero Desktop è stato spostato in C:\Users\<nome>\OneDrive\Desktop, e parte dei file che si vedono lì sono «segnaposto» senza contenuto locale. Utenti e IT continuano a usare il PC senza accorgersi di questo cambiamento.

In altre parole, l’ipotesi implicita di un’app aziendale che «il file è sul disco locale» è stata, senza che nessuno lo decidesse, sostituita dall’ipotesi che «il file è nel cloud e in locale c’è solo l’apparenza». Destinato ai responsabili IT delle PMI e agli sviluppatori di app Windows, questo articolo organizza, dalle fonti primarie Microsoft Learn, come funzionano i segnaposto, come giudicare lo stato dagli attributi di file, le trappole tipiche in cui cade un’app aziendale, cosa possono fare lato sviluppo e lato IT, e una procedura di triage quando vi dicono «il file non si apre».

Sostituzione dell'ipotesi implicita di un'app aziendaleL'ipotesi implicita di un'app aziendale che il file sia sul disco locale è stata, senza che nessuno lo decidesse, sostituita dall'ipotesi che il contenuto reale sia nel cloud e in locale ci sia solo l'apparenzaL'ipotesi implicita tradizionaleContenuto reale sul disco localeL'ipotesi sostituitaIl contenuto reale è nel cloudIn locale c'è solo l'apparenzaUn segnaposto

Figura 1: L’ipotesi che «il contenuto reale è locale» è stata, senza che nessuno lo decidesse, sostituita da «il contenuto reale è nel cloud; in locale c’è solo l’apparenza».

1. Prima la conclusione

  • Desktop, Documenti e Immagini possono essere stati spostati sotto C:\Users\<nome>\OneDrive\ dal KFM. Tende ad attivarsi nella configurazione iniziale di un PC nuovo, e un’organizzazione può anche applicarlo in massa per criterio. Un’app che presuppone un percorso fisso si rompe qui.1
  • File su richiesta è attivo per impostazione predefinita nell’app di sincronizzazione attuale. I file creati su un altro dispositivo o sul Web appaiono come segnaposto «solo online» senza contenuto locale.23
  • La vera identità di un segnaposto è un punto di analisi gestito dall’API Cloud Files (il minifiltro cldflt.sys). Sembra un file ordinario sia a Esplora risorse sia alle API di file, e aprirlo lo scarica (idrata) automaticamente.4
  • Lo stato si giudica dagli attributi di file. FILE_ATTRIBUTE_OFFLINE, RECALL_ON_DATA_ACCESS, PINNED, UNPINNED e simili sono i marcatori, e attrib li mostra come lettere O, P e U. Controllare solo gli attributi non causa un download.567
  • Gli incidenti tipici di un’app aziendale sono una combinazione di «non si apre», «lento», «attributi mal giudicati», «tempesta di eventi di sorveglianza» e «conflitto con la sincronizzazione». Offline o con OneDrive fermo l’idratazione fallisce, e un processo batch induce il download di ogni file.48
  • La risposta lato app è «rispettare i segnaposto». Le basi sono giudicare dagli attributi in enumerazione e non aprire alla leggera, usare FILE_FLAG_OPEN_NO_RECALL se serve, e non mettere la cartella dati sotto OneDrive.910
  • La risposta lato IT è «operare con i pin» e «controllare per criterio». Garantite il contenuto reale delle cartelle di lavoro con «Mantieni sempre su questo dispositivo» e configurate KFM e File su richiesta di proposito con Criteri di gruppo / Intune. Non dimenticate che Sensore memoria può anche «riportare i file inutilizzati a solo online».1112

In una frase: «un file visibile in Esplora risorse» e «un file che ha contenuto reale sul disco locale» non sono più la stessa cosa.

2. Che cosa sta succedendo — KFM e File su richiesta

2.1. Il Desktop potrebbe non essere più C:\Users\<nome>\Desktop

L’app di sincronizzazione OneDrive ha una funzione chiamata Known Folder Move (KFM). Nella schermata delle impostazioni appare come «Backup», «Esegui il backup delle cartelle importanti» e simili; quando è attiva, il vero Desktop, Documenti e Immagini vengono spostati (reindirizzati) sotto la cartella OneDrive.1

Luogo che l’utente vede Percorso reale prima del KFM Percorso reale dopo il KFM
Desktop C:\Users\taro\Desktop C:\Users\taro\OneDrive\Desktop
Documenti C:\Users\taro\Documents C:\Users\taro\OneDrive\Documents
Immagini C:\Users\taro\Pictures C:\Users\taro\OneDrive\Pictures

Nella configurazione iniziale (OOBE) di un PC nuovo, l’accesso con un account Microsoft o di lavoro presenta ampiamente il backup delle cartelle come proposta predefinita, e proseguire così la attiva. Un’organizzazione può anche applicarlo in massa senza chiedere nulla all’utente, con il criterio «Sposta silenziosamente le cartelle note di Windows in OneDrive» (KFMSilentOptIn).111

Due percorsi con cui si attiva il KFMAccedere con un account nella configurazione iniziale di un PC nuovo presenta il backup delle cartelle come proposta predefinita e proseguire così lo attiva; in un'organizzazione il criterio KFMSilentOptIn lo applica in massa senza chiedere all'utenteConfigurazione iniziale di un PC nuovoAccesso con un accountIl backup è proposto per impostazione predefinitaProseguire così lo attivaCriterio dell'organizzazioneKFMSilentOptInApplicato in massa senza chiedereKFM attivo

Figura 2: Il KFM si attiva senza che nessuno se ne accorga, o per la proposta predefinita alla configurazione iniziale o per il criterio di applicazione silenziosa dell’organizzazione.

Il punto scomodo è che l’aspetto in Esplora risorse quasi non cambia. Le API delle cartelle note della shell (SHGetKnownFolderPath e Environment.GetFolderPath di .NET) restituiscono il percorso corretto dopo lo spostamento, quindi un’app ben educata continua a funzionare. Ciò che si rompe è un’app che incorpora un percorso fisso come C:\Users\%USERNAME%\Desktop in un file di impostazioni o nel codice. Lo schema tipico di un’importazione che fallisce con «file non trovato» dopo la sostituzione del PC è questo.

Come un'app risolve il percorso dopo il KFMDopo che il KFM ha spostato il vero Desktop e cartelle simili sotto OneDrive, un'app che usa le API delle cartelle note continua a funzionare con il percorso corretto dopo lo spostamento, ma un'app che incorpora un percorso fisso fallisce con file non trovatoAPI delle cartelle noteUn percorso fisso cablatoKFM attivatoIl vero Desktop e simili passano sotto OneDriveCome risolve l'app il percorso?Ottiene il percorso corretto dopo lo spostamento e continuaFile non trovato

Figura 3: Dopo il KFM, un’app che usa le API delle cartelle note continua a funzionare, ma un’app che cablà un percorso fisso si rompe qui.

2.2. File su richiesta — visibili, ma senza contenuto reale

L’altra pista è File su richiesta. In un ambiente in cui è attivo, ogni file su OneDrive è visibile in Esplora risorse, ma il contenuto non viene scaricato finché il file non viene aperto. Questa funzione è attiva per impostazione predefinita nell’app di sincronizzazione attuale, e Microsoft raccomanda anche di lasciarla attiva.23

Lo stato si legge dalle icone di stato in Esplora risorse.13

Icona Stato Contenuto locale
Segno nuvola Solo online Nessuno (solo segnaposto)
Spunta su sfondo bianco Disponibile in locale Presente (ma può poi essere liberato automaticamente)
Spunta bianca su sfondo verde Mantieni sempre su questo dispositivo (fissato) Presente (fuori dalla liberazione automatica)

Quello importante qui è lo stato di mezzo. Un file aperto una volta e ora con contenuto locale può tornare solo online tramite l’azione «Libera spazio» dell’utente o tramite Sensore memoria, di cui si parla più avanti. È una causa di un guasto difficile da riprodurre del tipo «il mese scorso funzionava».312

I tre stati di File su richiesta e le transizioniUn file solo online diventa disponibile in locale quando viene aperto, ma Libera spazio o Sensore memoria possono riportarlo a solo online, e solo un file fissato è fuori dalla liberazione automaticaAprire (idratazione)Libera spazioSensore memoriaMantieni sempre su questo dispositivoMantieni sempre su questo dispositivoTogliere il pinSolo online (segno nuvola)Disponibile in localeFissato (Mantieni sempre su questo dispositivo)

Figura 4: I tre stati di File su richiesta. «Disponibile in locale» può tornare automaticamente a solo online; un pin è fuori da ciò.

3. La vera identità di un segnaposto — l’API Cloud Files e i punti di analisi

File su richiesta è implementato su un meccanismo di OS introdotto in Windows 10 versione 1709, l’API Cloud Files. L’unità di lavoro lato file system è un minifiltro di file system chiamato cldflt.sys (nome servizio CldFlt, «Windows Cloud Files Filter Driver»), e OneDrive è un «provider di sincronizzazione» che usa questa API.47

Un segnaposto è tecnicamente un punto di analisi (reparse point). Sul file system esistono solo metadati come nome, dimensione e timestamp (circa 1 KB); non ci sono dati di contenuto. Quando un’app apre il file e legge, il minifiltro rileva la richiesta, dice al provider di sincronizzazione di trasferire i dati, attende la fine del download e poi la lettura prosegue. Questo recupero si chiama idratazione; gettare il contenuto locale e tornare a un segnaposto si chiama disidratazione.4

Idratazione all'apertura di un segnapostoQuando un'app apre un segnaposto e legge, il minifiltro cldflt.sys rileva la richiesta, dice al provider di sincronizzazione di trasferire i dati, attende la fine del download e poi la lettura prosegueProvider di syncMinifiltro cldflt.sysApp aziendaleProvider di syncMinifiltro cldflt.sysApp aziendaleRichiesta di apertura e letturaOrdinare un trasferimento datiDownload completatoLa lettura prosegue

Figura 5: Una lettura di segnaposto prosegue dopo che il minifiltro ha fatto recuperare i dati dal provider di sincronizzazione.

Sentire «punto di analisi» fa temere la compatibilità con codice esistente che «tratta in modo speciale un punto di analisi se ne rileva uno», ma per compatibilità l’API Cloud Files nasconde il fatto che è un punto di analisi a tutti tranne il motore di sincronizzazione e i processi sotto %systemroot%. Da un’app ordinaria sembra «un file ordinario solo un po’ lento ad aprirsi». Quella trasparenza radicale è, insieme a essere comoda, anche il motivo per cui «l’app si vede spezzare le ipotesi senza accorgersene».4 Il meccanismo dei punti di analisi stessi è spiegato in «NTFS Internals».

Nascondere il punto di analisi e la differenza di aspettoLa vera identità di un segnaposto è un punto di analisi, ma l'API Cloud Files lo nasconde ai processi diversi dal motore di sincronizzazione, quindi da un'app ordinaria sembra un file ordinario solo un po' lento ad aprirsiIl motore di sync e similiQualsiasi altra appSegnaposto (punto di analisi)Quale processo l'ha aperto?Visibile come punto di analisiSembra un file ordinarioSembra solo un po' lento ad aprirsi

Figura 6: Il fatto che è un punto di analisi è nascosto a tutti tranne il motore di sincronizzazione, e a un’app ordinaria sembra un file ordinario.

Nelle proprietà di Esplora risorse un segnaposto ha l’aspetto caratteristico che «Dimensione» mostra la dimensione originale, mentre «Dimensione su disco» è quasi 0. L’ipotesi che «ha una dimensione, quindi deve avere contenuto reale» qui non regge.

Come appare un segnaposto nelle proprietàNelle proprietà di Esplora risorse un segnaposto mostra la dimensione originale come Dimensione mentre Dimensione su disco è quasi 0, quindi l'ipotesi che abbia una dimensione e debba quindi avere contenuto reale non reggeProprietà del segnapostoDimensione è quella originaleDimensione su disco quasi 0L'ipotesi che ci sia contenuto realeNon c'è contenuto locale

Figura 7: Un segnaposto mostra la dimensione originale come «Dimensione» mentre «Dimensione su disco» è quasi 0.

4. Gli attributi di file vi dicono lo stato

Lo stato del segnaposto è pubblicato come attributi di file ordinari. I principali sono i seguenti.5

Attributo Valore Significato
FILE_ATTRIBUTE_OFFLINE 0x00001000 I dati non sono immediatamente disponibili (l’attributo tradizionale della gestione gerarchica dello storage)
FILE_ATTRIBUTE_RECALL_ON_OPEN 0x00040000 Non c’è contenuto locale fisico. Appare solo nei risultati di enumerazione delle directory
FILE_ATTRIBUTE_PINNED 0x00080000 L’utente intende «tenerlo sempre in locale» (fissato)
FILE_ATTRIBUTE_UNPINNED 0x00100000 Il contenuto locale non deve essere conservato (l’intento di renderlo solo online)
FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS 0x00400000 Parte o tutto il contenuto non è locale. Leggere causa un recupero dal remoto

Il comando attrib del prompt dei comandi può visualizzare e impostare questi come una singola lettera. O è l’attributo offline, P è fissato, U è non fissato.6 La corrispondenza con lo stato di File su richiesta di OneDrive è organizzata nella documentazione Microsoft come segue.7

Stato File su richiesta Attributi Comando per impostare
Sempre disponibile (fissato) Pinned (si visualizza P) attrib +p <path>
Disponibile in locale Né P né U attrib -p <path>
Solo online Unpinned (si visualizza U) attrib +u <path>

Un avvertimento. Cambiare stato ha un ordine. Quando volete che un file solo online (U) diventi «disponibile in locale», eseguire solo -p lascia U impostata e il contenuto reale non viene recuperato. La documentazione Microsoft mostra anche la procedura di fare prima +p (sempre disponibile) per scaricare il contenuto reale e poi -p.7 In uno script che deve cambiare in modo affidabile uno stato esistente, è più sicuro cancellare l’attributo opposto nello stesso momento, come in attrib +p -u.

L'ordine per passare da solo online a disponibile in localeEseguire solo attrib -p su un file solo online lascia l'attributo U e il contenuto reale non viene recuperato; serve la procedura di scaricare prima il contenuto reale con attrib +p e poi -psolo attrib -pattrib +pattrib -pSolo online (U)Resta U; il contenuto reale non viene recuperatoFissato (scaricare il contenuto reale)Disponibile in locale

Figura 8: Passare da solo online richiede l’ordine di recuperare prima il contenuto reale con +p e poi -p.

Un esempio di giudizio in PowerShell. Guardare solo gli attributi non causa idratazione, quindi potete usarlo con fiducia per indagini e controlli di massa.

function Test-CloudPlaceholder {
    param([Parameter(Mandatory)][string]$Path)

    $value = [int](Get-Item -LiteralPath $Path -Force).Attributes

    [pscustomobject]@{
        Path               = $Path
        Offline            = ($value -band 0x00001000) -ne 0  # FILE_ATTRIBUTE_OFFLINE
        RecallOnDataAccess = ($value -band 0x00400000) -ne 0  # Non tutto il contenuto è locale
        Pinned             = ($value -band 0x00080000) -ne 0  # Mantieni sempre su questo dispositivo
        Unpinned           = ($value -band 0x00100000) -ne 0  # Solo online
    }
}

# Controllo di massa dei CSV sotto la cartella Documenti (il contenuto non viene scaricato).
# Risolvete il percorso con l'API delle cartelle note. Cablare il nome visualizzato
# "Documents" può diventare un percorso inesistente a seconda del vero nome della cartella
# (Documents vs. un nome localizzato) e della configurazione KFM
Get-ChildItem ([Environment]::GetFolderPath('MyDocuments')) -Recurse -Filter *.csv |
    ForEach-Object { Test-CloudPlaceholder $_.FullName } |
    Where-Object RecallOnDataAccess |
    Format-Table -AutoSize

Il cast a [int] è perché l’enumerazione FileAttributes di .NET non definisce nomi come RECALL_ON_DATA_ACCESS. Operazioni bit a bit sul valore numerico possono giudicare senza problemi.

5. Trappole in cui cade un’app aziendale

Questo è l’argomento principale. La trasparenza dei segnaposto è comoda per lo più, ma combinata con uno schema di elaborazione tipico di un’app aziendale affiora nelle sei forme seguenti.

5.1. Aprire avvia automaticamente un download — «non si apre» offline

Aprire un file solo online avvia l’idratazione sul posto. Online, con un file piccolo, è così veloce che non lo notate, ma quando OneDrive è fermo, disconnesso o in pausa, quando la rete è instabile o il file è grande, diventa «un file che esiste ma non si apre». L’errore può tornare come un codice della famiglia cloud-file come ERROR_CLOUD_FILE_PROVIDER_NOT_RUNNING (0x8007016A, “The cloud file provider is not running”), o essere osservato come timeout lato app.8

Un’ulteriore trappola è che un controllo di esistenza equivalente a File.Exists(), e l’ottenimento di attributi o dimensione, riescono. Ottenete uno schema di errore che l’intuizione del disco locale non sa spiegare: «il controllo di esistenza è passato, ma la lettura è fallita».

Diramazioni all'accesso a un file solo onlineUn controllo di esistenza e l'ottenimento di attributi e dimensione riescono, ma leggere il contenuto avvia l'idratazione; se OneDrive è in esecuzione e la rete è sana si può leggere dopo il download, altrimenti si fallisce con un errore come 0x8007016A o un timeoutNoControllo di esistenza, o ottenimento di attributi o dimensioneRiesceLettura del contenutoL'idratazione iniziaOneDrive in esecuzione e rete sana?Leggibile dopo il downloadUn errore come 0x8007016A, o un timeout

Figura 9: Un controllo di esistenza può riuscire mentre una lettura fallisce. Il successo o il fallimento dipende da se OneDrive è in esecuzione e dalla rete.

5.2. Un processo batch induce il download di ogni file

Puntate un batch che legge ogni file in una cartella, un calcolo di hash, una ricerca full-text o un backup fatto in casa a un albero sotto OneDrive e viene indotta l’idratazione di ogni file che toccate. Per una cartella di diversi GB il processo diventa anormalmente lento, il download riempie anche il disco, e su un PC a bassa capacità la mancanza di spazio libero invita un altro guasto. La capacità che File su richiesta doveva risparmiare scompare in un’unica scansione completa.

Inoltre, se un’app causa idratazione senza un’azione esplicita dell’utente, Windows può mostrare un toast e dare all’utente la scelta di bloccare. Una volta bloccata, quell’app continua a far fallire i download in seguito (si può togliere con «Download automatici di file» in Impostazioni). È una causa di «l’importazione fallisce solo su un PC particolare».4

Come un batch induce il download di ogni fileUn batch sotto OneDrive induce l'idratazione di ogni file che tocca, causando ritardo di elaborazione e pressione sul disco, e se l'utente blocca sul toast i download continuano a fallire in seguitoNoUn batch sotto OneDriveIdratare ogni file toccatoRitardo di elaborazione e pressione sul discoPuò comparire un toastL'utente ha bloccato?I download falliscono in seguitoIl download continua

Figura 10: Un batch induce l’idratazione di ogni file, e se viene bloccato sul toast i fallimenti continuano in seguito.

5.3. Comportamento errato del codice che non si aspetta gli attributi

Il codice che non conosce FILE_ATTRIBUTE_OFFLINE o RECALL_ON_DATA_ACCESS si comporta male in punti inattesi.

  • Gli attributi sono testati per uguaglianza esatta (attributes == FileAttributes.Archive e simili), quindi un segnaposto viene escluso o trattato come errore in quanto «file inatteso»
  • Una decisione di esclusione in uno strumento di backup o sync interpreta l’attributo OFFLINE come «già inviato su nastro» e salta (o, al contrario, recupera ogni file che avrebbe dovuto escludere)
  • Un controllo di sola lettura o un’operazione sul bit di archivio spezza la combinazione di attributi
Schemi di comportamento errato del codice che non si aspetta gli attributiIl codice che non conosce gli attributi dei segnaposto si comporta male come esclusione o gestione errori da un test di uguaglianza esatta, salto o recupero completo da una cattiva interpretazione di OFFLINE, o spezzamento della combinazione di attributiCodice che non si aspetta gli attributiTest di uguaglianza esattaInterpreta male OFFLINEUn'operazione di attributo spezza la combinazioneEscluso o in errore come inattesoSalto, o un recupero completo

Figura 11: Il codice che non conosce OFFLINE o gli attributi della famiglia RECALL si comporta male come esclusione, salto sbagliato o distruzione di attributi.

La guida Microsoft per gli sviluppatori di minifiltri afferma chiaramente che non si deve emettere una lettura o una scrittura sconsiderata verso un file che ha RECALL_ON_DATA_ACCESS. Il documento è rivolto ai driver kernel, ma il principio «toccare il contenuto di un file con questo attributo = si verifica un costo di recupero» vale tale e quale per un’app in modalità utente.10

5.4. Interazione tra FileSystemWatcher e la sincronizzazione

Sorvegliate una cartella sotto OneDrive con FileSystemWatcher e ottenete non solo le azioni dell’utente ma anche un gran numero di eventi dall’attività dell’app di sincronizzazione. Ogni volta che una modifica su un altro dispositivo viene sincronizzata, e ogni volta che idratazione o disidratazione cambiano attributi o dimensione, può scattare un evento Changed. Inoltre, un progetto che scrive il risultato di una sorveglianza-e-importazione nella stessa cartella diventa una «tempesta di notifiche di modifica» in un ciclo scrittura → upload → aggiornamento attributi → un altro evento. Il diradamento degli eventi e la progettazione di un controllo del contenuto reale sono trattati in «Una guida pratica a FileSystemWatcher», ma sotto OneDrive il bisogno è un gradino più alto.

Un ciclo di notifiche di modifica da sorveglianza e riscritturaSe un'app di sorveglianza che ha ricevuto un evento di modifica riscrive il risultato di importazione nella stessa cartella, l'upload e l'aggiornamento attributi dell'app di sync scatenano un altro evento, e diventa un ciclo — una tempesta di notificheEvento di modificaL'app di sorveglianza importaRiscrittura nella stessa cartellaL'app di sync caricaAttributi o dimensione vengono aggiornatiSync di una modifica da un altro dispositivo

Figura 12: Riscrivere il risultato di importazione nella stessa cartella diventa un ciclo in cui l’attività dell’app di sincronizzazione produce un altro evento.

5.5. Conflitti di sincronizzazione durante un blocco esclusivo e file «Copia»

Mentre un’app aziendale ha un file aperto con un blocco esclusivo, l’app di sincronizzazione non può né caricare né aggiornare quel file. Mettere un’app a blocco tenuto a lungo (un Access .accdb, un file dati in un formato fatto in casa, un file di log e simili) sotto OneDrive rende gli errori di sincronizzazione lo stato normale. Al contrario, quando lo stesso file è modificato su più PC, l’app di sincronizzazione cerca di tenere entrambe le edizioni e produce un file duplicato con un nome PC o una copia di conflitto come «— copia». Un’importazione che presuppone «una cartella, un file» si comporta male su questo duplicato. Per le basi della progettazione dei lock, si veda «Fondamenti di mutua esclusione per integrazione basata su file».

Problemi di sync causati da un blocco esclusivo e da modifiche su più PCMentre un'app ha un file aperto con un blocco esclusivo l'app di sync non può aggiornare e gli errori di sync diventano lo stato normale; modificare lo stesso file su più PC produce una copia di conflitto e l'ipotesi una-cartella-un-file crollaL'app apre con un blocco esclusivoImpossibile sincronizzare; gli errori diventano normaliLo stesso file è modificato su più PCViene prodotta una copia di conflittoUn duplicato con nome PC o copiaL'ipotesi una-cartella-un-file crolla

Figura 13: Un blocco esclusivo rende gli errori di sincronizzazione lo stato normale, e le modifiche su più PC invitano un comportamento errato da una copia di conflitto.

5.6. Antivirus e l’indicizzatore di ricerca inducono l’idratazione

Non è solo l’app aziendale a leggere il contenuto dei file. Una scansione completa del software antivirus e l’indicizzatore di ricerca inducono anche l’idratazione se toccano il contenuto di un segnaposto. Microsoft Defender e prodotti simili saltano i file che hanno l’attributo RECALL_ON_DATA_ACCESS in fase di scansione su richiesta, ma è una risposta lato prodotto, e non potete presupporre che ogni prodotto di sicurezza mostri la stessa cura. Se vedete sintomi come «rete e disco saturi ogni notte all’ora della scansione» o «file che dovevano essere solo online si sono tutti materializzati entro mattina», sospettate questa linea.14

Idratazione indotta da un prodotto di sicurezza o dall'indicizzatore di ricercaQuando una scansione completa o l'indicizzatore di ricerca toccano il contenuto di un segnaposto, un prodotto che rispetta l'attributo RECALL salta, ma un prodotto che non lo fa idrata ogni file e causa pressione di banda notturna o materializzazione mattutinaUn prodotto che lo rispettaUn prodotto che non lo faUna scansione completa o l'indicizzatore di ricercaRispetta l'attributo RECALL?Salta il segnapostoTocca il contenuto e idrataBanda e disco saturi di notteEntro mattina i file si sono tutti materializzati

Figura 14: Una scansione che non rispetta l’attributo induce l’idratazione di ogni file e appare come carico notturno o materializzazione mattutina.

6. Risposta dello sviluppo app — rispettare i segnaposto

La politica di base come sviluppatori è trattare un segnaposto non come «un file rotto» ma come «un file che ha un costo di recupero».

  • Giudicate dagli attributi in enumerazione e non aprite alla leggera. In una scansione di cartella, confermate prima dagli attributi (il giudizio del capitolo 4) se è solo online, e aprite solo i file di cui vi serve il contenuto. Date all’elaborazione «non fatale se manca» — raccolta log, calcolo hash, generazione anteprima — l’opzione di saltare i segnaposto.
// Definire come numeri i valori che FileAttributes in .NET non definisce
const FileAttributes RecallOnDataAccess = (FileAttributes)0x00400000;
const FileAttributes RecallOnOpen       = (FileAttributes)0x00040000;

static bool IsCloudPlaceholder(FileAttributes attributes) =>
    (attributes & (RecallOnDataAccess | RecallOnOpen | FileAttributes.Offline)) != 0;

foreach (var file in new DirectoryInfo(watchFolder).EnumerateFiles("*.csv"))
{
    if (IsCloudPlaceholder(file.Attributes))
    {
        log.Warn($"{file.Name} è solo online; questa volta si salta");
        continue;
    }
    Import(file.FullName);
}
Il percorso di giudicare dagli attributi in enumerazione e poi aprireIn una scansione di cartella, confermate prima gli attributi in enumerazione; se è un segnaposto, saltate e lasciate un log di avviso, ed eseguite l'importazione solo sugli altri file, così da evitare un'idratazione sconsiderataNoConfermare gli attributi in enumerazioneSegnaposto?Saltare e lasciare un log di avvisoEseguire l'importazioneLa politica di aprire solo i file di cui serve il contenuto

Figura 15: Giudicate dagli attributi in enumerazione e saltate un segnaposto senza aprirlo, così da evitare un’idratazione sconsiderata.

  • Notate che FILE_FLAG_OPEN_NO_RECALL non è una garanzia di «non scaricare». Specificare questo flag su CreateFile può indicare l’intento che «i dati ottenuti devono restare sul lato remoto e non essere riscritti nello storage locale». È però un flag solo per non rendere residenti in locale i dati ottenuti; se leggete il contenuto, il trasferimento dati stesso avviene comunque. Se volete evitare banda e latenza stesse, finite con attributi, dimensione e timestamp soli — non richiedete accesso in lettura (aprite con diritti di accesso 0, usate i metadati dal risultato di enumerazione). È il più sicuro.9
Effetto e limiti di FILE_FLAG_OPEN_NO_RECALLFILE_FLAG_OPEN_NO_RECALL è un flag per non rendere residenti in locale i dati ottenuti; se leggete il contenuto il trasferimento dati stesso avviene comunque, quindi se volete evitare il trasferimento il più sicuro è finire con metadati come gli attributiAprire con il flag NO_RECALLLeggere il contenutoAvviene un trasferimento datiNon diventa residente in localeFinire con i soli metadatiNessun trasferimento; il più sicuro

Figura 16: FILE_FLAG_OPEN_NO_RECALL evita solo di diventare residente in locale; se volete evitare il trasferimento stesso, finite con i soli metadati.

  • Mettete «questo è sotto OneDrive» nel messaggio di errore. In un fallimento di lettura, solo confermare se il percorso di destinazione è sotto %OneDrive% e includerlo nel messaggio riduce molto il tempo di triage per campo e help desk. Se rilevate un errore della famiglia cloud-file come 0x8007016A, l’ideale è dire all’utente «controllate lo stato di OneDrive».
  • Non mettete la cartella dati dell’app sotto OneDrive. In un ambiente KFM anche «Documenti» è sotto OneDrive. Mettete impostazioni, database e file di lavoro dell’app in %ProgramData% o %LocalAppData%, e non scegliete Desktop o Documenti come percorso di salvataggio predefinito o cartella di importazione predefinita. Come decidere cosa mettere dove è riassunto in «How to Choose Where a Windows App Stores Local Data».
  • Decidete il comportamento quando l’utente sceglie una posizione sotto OneDrive. Per un’app che lascia scegliere all’utente un percorso di salvataggio, includete in anticipo nella specifica una decisione di progetto come avvisare quando il percorso scelto è sotto OneDrive (sotto il percorso delle variabili d’ambiente OneDrive / OneDriveCommercial), o rifiutare solo il posizionamento di un file di lock o di un DB.

7. Risposta lato IT — controllare con pin e criteri

Dalla posizione IT, l’esercizio realistico non è «disattivare del tutto File su richiesta» ma garantire il contenuto reale solo dove il lavoro ne ha bisogno.

  • Fissate le cartelle che un’app aziendale legge. Scegliete «Mantieni sempre su questo dispositivo» dal menu contestuale di Esplora risorse, o eseguite attrib +p -u <folder> /s /d da uno script di imaging (specificate -u nello stesso momento così che un misto di file già solo online venga cambiato in modo affidabile a fissato). Un file fissato ha il contenuto reale garantito in locale ed è anche fuori dalla conversione automatica a solo online di cui si parla più avanti.72
  • Configurate KFM e File su richiesta «di proposito», non «era attivo quando ce ne siamo accorti». I criteri principali (Criteri di gruppo / Intune) sono i seguenti.111
Scopo Criterio (valore di registro) Effetto
Controllo di File su richiesta Use OneDrive Files On-Demand (FilesOnDemandEnabled) On: i nuovi utenti sono per impostazione predefinita solo online. Off: sincronizzazione completa classica
Applicazione di massa del KFM Silently move Windows known folders to OneDrive (KFMSilentOptIn) Spostare Desktop e simili senza un’azione dell’utente
Vietare il KFM Prevent users from moving their Windows known folders to OneDrive (KFMBlockOptIn) Vietare lo spostamento delle cartelle note
Vietare di disattivare il KFM Prevent users from redirecting their Windows known folders to their PC (KFMBlockOptOut) Vietare all’utente di disattivarlo
Ridurre la capacità dei siti del team Convert synced team site files to online-only (DehydrateSyncedTeamSites) Rendere solo online i siti del team sincronizzati (notare che agisce nella direzione della scomparsa del contenuto reale)
  • Sapete come si muove Sensore memoria. Sensore memoria ha una funzione che riporta automaticamente a solo online i file cloud non aperti da un certo numero di giorni, e potete configurare i giorni con il criterio (ConfigStorageSenseCloudContentDehydrationThreshold). Il valore predefinito è 0 (non riportare automaticamente), ma se un utente l’ha attivato dalla schermata delle impostazioni, o l’organizzazione l’ha configurato per dispositivi a bassa capacità, «un file aperto la settimana scorsa è tornato a un’icona nuvola» avviene come comportamento normale. Un file fissato è fuori ambito, quindi «fissare le cartelle di lavoro» funziona anche qui.122
Diramazioni della conversione automatica a solo online di Sensore memoriaNella liberazione automatica di Sensore memoria, un file fissato è fuori ambito e il contenuto reale viene conservato; un file non fissato non aperto da un certo numero di giorni viene riportato a solo onlineNoNoLiberazione automatica di Sensore memoriaFissato?Fuori ambito; il contenuto reale è conservatoNon aperto da un certo numero di giorni?Riportato a solo onlineIl contenuto reale è conservatoIl valore predefinito 0 non riporta automaticamente

Figura 17: Sensore memoria riporta a solo online un file non aperto da un certo numero di giorni, ma un pin è fuori ambito.

  • Stimate l’impatto prima di disattivare File su richiesta. Disattivare FilesOnDemandEnabled diventa una sincronizzazione classica a download completo, ma il consumo disco e il carico di banda della prima sincronizzazione saltano. Microsoft raccomanda di lasciarla attiva, e dovreste trattare la disattivazione come misura limitata dopo aver confermato che «il volume di dati degli utenti di destinazione è piccolo» e «c’è margine di disco».112
  • Inseritelo nella procedura di supporto. Mettere la procedura di triage del capitolo successivo nel modello di richiesta «un file sul desktop non si apre» mantiene la qualità della risposta anche quando cambia chi la gestisce.

8. Procedura di triage — quando vi dicono «il file non si apre»

Quando prendete la consultazione, confermate dall’alto in basso.

# Cosa confermare Come Cosa imparate
1 Il percorso è sotto OneDrive? Confermate la radice di sync con echo %OneDrive% e confrontatela con il percorso di destinazione. Confermate anche il percorso reale di «Desktop» nella barra degli indirizzi di Esplora risorse Se KFM / OneDrive è coinvolto
2 Lo stato del file Confermate U (solo online), P (fissato) e O con attrib <path>. Guardate anche «Dimensione su disco» nelle proprietà Se il contenuto reale è locale, o è un segnaposto
3 Se OneDrive è in esecuzione L’icona della barra delle applicazioni (connesso, in pausa, errore), Get-Process OneDrive Se l’idratazione è possibile. 0x8007016A è tipicamente fermo o mal configurato8
4 La rete Proxy aziendale, banda, raggiungibilità del servizio OneDrive Se il download stesso è possibile
5 Spazio disco libero Spazio libero sul volume di destinazione. A bassa capacità c’è anche un criterio con cui OneDrive blocca i download Un altro fattore di fallimento dell’idratazione
6 Un record del fallimento Annotate il codice di errore dell’app e l’ora, e confrontateli con la visualizzazione errori dell’app di sync Se è un problema lato app o lato OneDrive

Il ripiego è fare clic con il pulsante destro sulla cartella di destinazione e scegliere «Mantieni sempre su questo dispositivo» (o attrib +p /s /d). Questo allinea il contenuto reale in locale e il lavoro può riprendere. Sopra, decidete se la causa essenziale è lato app (capitolo 6) o lato IT (capitolo 7) come risposta permanente.

Il percorso da un ripiego a una risposta permanenteCome ripiego, impostare la cartella di destinazione su Mantieni sempre su questo dispositivo allinea il contenuto reale in locale così che il lavoro possa riprendere; sopra decidete se la causa essenziale è lato app o lato IT e passate a una risposta permanenteLato appLato ITFissare come ripiegoIl contenuto reale è allineato in localeIl lavoro riprendeDov'è la causa essenziale?Alla risposta del capitolo 6Alla risposta del capitolo 7

Figura 18: Il ripiego è fissare, allineare il contenuto reale e riprendere il lavoro; la risposta permanente procede dopo aver deciso se è il lato app o il lato IT.

Se avete confermato fin qui e «il percorso non è sotto OneDrive» e «non è nemmeno un segnaposto», passate ad altre cause classiche come una cartella condivisa o la lunghezza del percorso. «Pitfalls of Network Drives and UNC Paths» e «MAX_PATH and Windows Path/Filename Pitfalls» sono la mappa per ciò che segue.

  • Il KFM può aver spostato il vero Desktop, Documenti e Immagini sotto C:\Users\<nome>\OneDrive\. Un’app che presuppone un percorso fisso si rompe qui. Risolvere con le API delle cartelle note è il primo passo.
  • File su richiesta è attivo per impostazione predefinita, e i segnaposto senza contenuto locale esistono come cosa ovvia. Un segnaposto è un punto di analisi dell’API Cloud Files (cldflt.sys), e aprirlo lo idrata automaticamente.
  • Lo stato si giudica dagli attributi di file (OFFLINE / RECALL_ON_DATA_ACCESS / PINNED / UNPINNED) e appare come O, P e U in attrib. Controllare solo gli attributi non causa un download.
  • Gli incidenti delle app aziendali appaiono come fallimento di idratazione offline, download completo da un batch, codice che non si aspetta gli attributi, interazione tra FileSystemWatcher e sync, conflitto tra un blocco esclusivo e la sync, e idratazione indotta da un prodotto di sicurezza.
  • Lato app, le basi sono «giudicare dagli attributi e non aprire alla leggera», «non mettere la cartella dati sotto OneDrive» e «dire che è sotto OneDrive quando segnalate un errore».
  • Lato IT, create lo stato voluto con «il fissaggio delle cartelle di lavoro» e «il controllo per criterio di KFM, File su richiesta e Sensore memoria».
  • Il triage si può percorrere in modo meccanico nell’ordine percorso → attrib → OneDrive in esecuzione → rete → spazio libero → record.

La prossima volta che vi dicono «il file c’è ma non si apre», chiedete prima questo.

Quel file è davvero sul disco locale? O c’è seduta lì solo l’apparenza del cloud?

Articoli correlati

Aree di consulenza correlate

KomuraSoft LLC gestisce l’indagine dei guasti di app aziendali che coinvolgono OneDrive e l’archiviazione cloud — «un’importazione che funzionava non funziona più dopo la sostituzione del PC», «un file non si apre solo su un PC particolare» —, la progettazione e la correzione dell’elaborazione file e della sorveglianza che presuppongono i segnaposto, e le revisioni della progettazione del percorso di salvataggio in un ambiente KFM / File su richiesta. Iniziare isolando il sintomo va bene — non esitate a contattarci.

Riferimenti

  1. Microsoft Learn, Redirect and move Windows known folders to OneDrive. Che il KFM sposta Desktop, Documenti e Immagini sotto OneDrive, e i criteri di proposta, applicazione silenziosa, divieto di disattivazione e divieto di spostamento.  2 3 4

  2. Microsoft Learn, Recommended sync app configuration. Che File su richiesta è attivo per impostazione predefinita e lasciarlo attivo è raccomandato, e che Sensore memoria pulisce i «file disponibili in locale che non sono fissati».  2 3 4 5

  3. Microsoft Support, Save disk space with OneDrive Files On-Demand for Windows. I tre stati di File su richiesta e le azioni «Mantieni sempre su questo dispositivo» e «Libera spazio».  2 3

  4. Microsoft Learn, Build a Cloud Sync Engine that Supports Placeholder Files. Una panoramica dell’API Cloud Files, che un segnaposto tiene solo circa 1 KB di metadati e aprirlo lo idrata automaticamente, che il punto di analisi è nascosto ai processi diversi dal motore di sincronizzazione e da quelli sotto %systemroot%, e il toast e il blocco per l’idratazione in background.  2 3 4 5 6

  5. Microsoft Learn, File Attribute Constants. Le definizioni e i valori di FILE_ATTRIBUTE_OFFLINE, RECALL_ON_OPEN, RECALL_ON_DATA_ACCESS, PINNED e UNPINNED.  2

  6. Microsoft Learn, attrib. La sintassi del comando attrib e i flag di attributo tra cui O (offline), P (fissato) e U (non fissato).  2

  7. Microsoft Learn, Query and set Files On-Demand states in Windows. Confermare lo stato di File su richiesta con attrib e impostarlo con +p, -p e +u, e il servizio CldFlt.  2 3 4 5

  8. Microsoft Learn, Error 0x8007016a when copying files in OneDrive. Che l’errore 0x8007016A “The cloud file provider is not running” si verifica quando OneDrive è mal configurato o fermo, e i passi di risoluzione.  2 3

  9. Microsoft Learn, CreateFileW function (fileapi.h). Che FILE_FLAG_OPEN_NO_RECALL è un flag che indica che «i dati richiesti devono restare sul lato remoto e non essere ritrasferiti allo storage locale» (non impedisce di ottenere i dati stessi), e l’ottenimento degli attributi aprendo con diritti di accesso 0.  2

  10. Microsoft Learn, Handling placeholders. Che un segnaposto deve avere FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS, e che una lettura o una scrittura sconsiderata verso un file con questo attributo invita un’idratazione inutile o una corruzione dei dati.  2

  11. Microsoft Learn, IT Admins - Use OneDrive policies to control sync settings. I criteri per configurare l’app di sincronizzazione OneDrive con GPO/Intune, tra cui FilesOnDemandEnabled, KFMSilentOptIn, KFMBlockOptIn, KFMBlockOptOut e DehydrateSyncedTeamSites.  2 3 4

  12. Microsoft Learn, Policy CSP - Storage. Che Sensore memoria può rendere solo online i file cloud non aperti da un certo numero di giorni, il valore predefinito 0 (non riportare automaticamente) e la configurazione da 0 a 365 giorni.  2 3

  13. Microsoft Support, What do the OneDrive icons mean?. Il significato delle icone di stato mostrate in Esplora risorse, come la nuvola e le spunte. 

  14. Microsoft Learn, Plan for an Azure File Sync deployment. Che una scansione antivirus può causare il recall di un file con l’attributo RECALL_ON_DATA_ACCESS, e che Microsoft Defender e prodotti simili saltano i file con questo attributo in fase di scansione su richiesta. 

Articoli recenti con gli stessi tag per approfondire argomenti vicini.

Queste pagine collocano l’argomento in un contesto più ampio di servizi e decisioni.

L’articolo è direttamente collegato ai servizi seguenti.

Domande frequenti

Domande che ricorrono nelle consulenze sull’argomento dell’articolo.

Un'app aziendale dice «file non trovato» e non legge un CSV sul desktop. Perché?
In molti casi la cartella Desktop stessa è stata spostata sotto C:\Users\<nome utente>\OneDrive\Desktop dal Known Folder Move (KFM) di OneDrive, oppure il file è diventato un segnaposto solo online. Un'app che presuppone un percorso fisso come C:\Users\<nome utente>\Desktop non trova il file dopo lo spostamento. Anche se il percorso è corretto, un file solo online può non aprirsi quando OneDrive è fermo o la rete è instabile. Prima confermate se il percorso di destinazione è sotto OneDrive e controllate con attrib se è impostata U (solo online). Come ripiego, potete assicurare il contenuto reale in locale con «Mantieni sempre su questo dispositivo» dal menu contestuale.
Un programma può capire se un file è solo online?
Sì. Un segnaposto solo online porta attributi come FILE_ATTRIBUTE_OFFLINE e FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS (0x00400000), quindi potete giudicare lo stato dagli attributi senza scaricare il contenuto. Ottenere gli attributi o enumerare una cartella non causa idratazione (download). In .NET alcuni valori non sono definiti su FileAttributes: si converte in intero e si verifica con operazioni bit a bit. Se dovete davvero aprire senza leggere il contenuto, è disponibile anche un mezzo come FILE_FLAG_OPEN_NO_RECALL di CreateFile.
Disattivare File su richiesta risolve il problema?
Trattate la disattivazione come ultima risorsa. Disattivarla scarica in locale ogni file nell'ambito di sincronizzazione, quindi capacità disco e carico di rete della prima sincronizzazione diventano grandi; Microsoft raccomanda anche di lasciarla attiva. In pratica è più flessibile impostare solo le cartelle che un'app aziendale legge su «Mantieni sempre su questo dispositivo» (fissarle). Più fondamentalmente, la correzione affidabile è riprogettare in modo che la cartella dati e quella di importazione dell'app non stiano sotto la gestione di OneDrive.
Ho impostato «Mantieni sempre su questo dispositivo», ma alcuni file tornano all'icona nuvola. Perché?
Prima confermate con attrib che il file abbia davvero il pin (attributo P). Un file fissato è fuori dalla conversione automatica a solo online di Sensore memoria, ma un file solo «disponibile in locale» perché qualcuno l'ha aperto, senza pin, può tornare solo online dopo un periodo a seconda delle impostazioni e dei criteri di Sensore memoria. L'azione «Libera spazio» dell'utente e un criterio che rende solo online i file dei siti del team (DehydrateSyncedTeamSites) riportano anche l'icona nuvola. Per le cartelle che devono restare locali per il lavoro, operate fissando a livello di cartella.

Profilo dell’autore

Pagina di presentazione dell’autore dell’articolo.

Go Komura

Rappresentante di KomuraSoft LLC

Specializzato nello sviluppo di software Windows, nella consulenza tecnica e nell’analisi dei malfunzionamenti, soprattutto nei progetti con sistemi esistenti e guasti difficili da riprodurre.

Torna al blog