OneDrive-kansion poistaminen ei onnistu
OneDrive-synkronoitujen kansioiden ja tiedostojen kanssa saattaa satunnaisesti törmätä ongelmaan, jossa kansion tai yksittäisen tiedoston poistaminen ei onnistu. Tätä saattaa esiintyä, jos on juuri siirtänyt tai poistanut suuria määriä tiedostoja.
Esimerkkinä tapaus, jossa käyttäjän työpöydällä on kaksi kansiota: TEMP ja TEMP2. Kansioiden poistaminen graafisen käyttöliittymän kautta ei johda mihinkään, eli poistoyrityksestä ei tule virheilmoitusta, eikä mikään OneDrive-client-ohjelmassa osoita, että muutosta oltaisiin synkronoimassa pilveen. Molemmat kansiot sisältävät alikansioita ja pienen määrän tiedostoja viimeisimmän alikansion sisällä.
Kansioiden uudelleennimeäminen kuitenkin onnistuu, eikä mikään aktiivinen prosessi käytä kyseistä tiedostosijaintia Resurssienvalvonnan suoritinkahvojen perusteella:
Kansiot ovat oikeasti olemassa OneDrive-pilvipalvelussa, mikä on nopeasti tarkistettavissa klikkaamalla työpöydän ongelmakansioita hiiren oikealla painikkeella ja valitsemalla ”Näytä verkossa”.
Tuolloin kansio aukeaa suoraan selaimen OneDrivessa, josta nähdään, että kansio sisältöineen on kyllä olemassa myös pilven päässä ja sitä kautta täysin muokattavissa.
Kansioiden poistaminen onnistuu selainnäkymässä ilman ongelmia. Kansiot eivät kuitenkaan poistu Windowsin työpöydältä, vaikka OneDrive on synkronoinut viimeisimmät muutokset ja on ajan tasalla. Kansioiden avaaminen selaimessa niiden poistamisen jälkeen johtaa virheilmoitukseen, mikä osoittaa, että kyseinen sisältö on poistunut pilven päästä oikein:
Työpöytä-näkymän päivittäminen tai tietokoneen uudelleenkäynnistys ei auta, eikä OneDriven resetointi reset-parametria käyttäen:
%localappdata%\Microsoft\OneDrive\onedrive.exe /reset
Kansiot ovat yhä ikään kuin jumissa työpöydällä, eikä niiden poistaminen johda mihinkään. Poistamisen yrittäminen PowerShellin kautta johtaa kuitenkin kirjallisiin virheilmoituksiin. Kansion rekursiivinen poistaminen pelkällä Remove-Item cmdlet-komennolla johtaa virheilmoitukseen:
Rekursiivinen poistaminen Remove-Item cmdlet-komennolla ja sen force-parametrilla johtaa taas eri virheilmoitukseen:
Saman rekursiivisen poiston yrittäminen Windows Subsystem for Linuxin (Ubuntu 20.04 LTS) kautta rm-komennolla johtaa myös eri virheilmoitukseen.
Tuon komennon tulostus vahvistaa, että ongelma on ensimmäisen työpöydän TEMP-kansion kohdalla nimenomaan sen viimeisen alikansion poistamisessa. Kyseinen kansio ei ole tyhjä. Rekursiivisen poistamisen pitäisi kuitenkin onnistua normaalitilanteessa ilman ongelmia. Tässä vaiheessa ongelman lähde on juurikin noissa alikansioiden sisältämissä tiedostoissa. Sekä TEMP että TEMP2-kansioissa on yhteensä neljä tiedostoa, jotka eivät suostu poistumaan, ja se estää niiden pääkansioiden poistamisen.
Ongelmatiedoston sisältävän alikansion avaaminen resurssienhallinnassa johtaa virheilmoitukseen:
Sama toistuu myös PowerShellissä:
Vikatilanteen korjaaminen
Tällainen vikatilanne on tyypillisesti korjattavissa chkdsk -työkalulla. Kyseessä on oletuksena Windowsin mukana tuleva komentorivipohjainen ohjelma, jolla voidaan tarkistaa tiedostojärjestelmä ja tiedostojen metadata loogisia sekä fyysisiä virheitä etsien.
Komento tulee suorittaa järjestelmänvalvojan oikeuksin. Tässä yhteydessä komennossa määritetään kaksi parametria:
c:
= Se levyosio, jolle tarkistusta ollaan suorittamassa
/r
= Etsii levyltä huonot sektorit ja palauttaa luettavat tiedot. Suorittaa samalla myös /f -parametrin, joka korjaa levyn virheet.
Eli syötettävä komento:
chkdsk c: /r
Koska C-levy on järjestelmän käytössä, vaatii tarkistuksen aloittaminen ja korjaustoimenpide tietokoneen uudelleenkäynnistyksen. Uudelleenkäynnistyksen yhteydessä chkdsk aloittaa levynkorjauksen, joka voi kestää noin 15 minuuttia levystä riippuen.
Levynkorjauksen aikana kirjatut lokitiedot korjaustoimenpiteiden vaiheista ovat levyntarkistuksen ja tietokoneen uudelleenkäynnistymisen jälkeen luettavissa Windowsin Tapahtumienvalvonnasta navigoimalla Windows-lokit > Application. Sielä löytyy Wininit-lähteellä kirjattu tapahtuma:
Levyntarkistuksen ensimmäisen vaiheen lokitiedot osoittavat tässä tapauksessa samaa, joka selvisi myös alikansioiden tiedostoja käsiteltäessä; neljän tiedoston uudelleenjäsennyskohdan puskurissa oleva tunniste (attribuutti) ei kelpaa. Ensimmäiseen tiedostoon viittaava merkintä näkyy alla lihavoituna. Chkdsk korjaa tilanteen poistamalla korruptoituneen attribuutin. Sama toimenpide toistetaan kaikille ongelmatiedostoille, joita tässä esimerkkitapauksessa on siis neljä.
Checking file system on C: The type of the file system is NTFS. A disk check has been scheduled. Windows will now check the disk. Stage 1: Examining basic file system structure ... File 0x4aa4d has bad reparse point attribute. ReparseDataLength, 0x0, inconsistence with the attribute length 0x15b. Deleting corrupt attribute record (0xC0, "") from file record segment 0x4AA4D. File 0x4b6f7 has bad reparse point attribute. ReparseDataLength, 0x0, inconsistence with the attribute length 0x134. Deleting corrupt attribute record (0xC0, "") from file record segment 0x4B6F7. File 0x7ad0b has bad reparse point attribute. ReparseDataLength, 0x94be, inconsistence with the attribute length 0x134. Deleting corrupt attribute record (0xC0, "") from file record segment 0x7AD0B. File 0x8b504 has bad reparse point attribute. ReparseDataLength, 0x858, inconsistence with the attribute length 0x134. Deleting corrupt attribute record (0xC0, "") from file record segment 0x8B504. 918528 file records processed. File verification completed. Phase duration (File record verification): 10.13 seconds. 16386 large file records processed. Phase duration (Orphan file record recovery): 0.00 milliseconds. 0 bad file records processed. Phase duration (Bad file record checking): 1.70 milliseconds.
Toisessa vaiheessa korjataan muita tietoja samoihin neljään ongelmatiedostoon, tai pikemminkin niiden uudelleenjäsennyskohtaan (tiedostoon linkittyvään tietovarastoon) liittyen. Ensimmäiseen tiedostoon viittavat merkinnät näkyvät alla lihavoituna.
Stage 2: Examining file name linkage ... The reparse flag in standard information attribute in file 0x4aa4d should not be set. Correcting reparse point file record segment 4AA4D. The reparse flag in standard information attribute in file 0x4b6f7 should not be set. Correcting reparse point file record segment 4B6F7. The reparse flag in standard information attribute in file 0x7ad0b should not be set. Correcting reparse point file record segment 7AD0B. The reparse flag in standard information attribute in file 0x8b504 should not be set. Correcting reparse point file record segment 8B504. The reparse point index entry in file 0x1a points to file 0x4aa4d but the file has no reparse point in it. Deleting an index entry from index $R of file 1A. The reparse point index entry in file 0x1a points to file 0x4b6f7 but the file has no reparse point in it. Deleting an index entry from index $R of file 1A. The reparse point index entry in file 0x1a points to file 0x7ad0b but the file has no reparse point in it. Deleting an index entry from index $R of file 1A. The reparse point index entry in file 0x1a points to file 0x8b504 but the file has no reparse point in it. Deleting an index entry from index $R of file 1A. 130655 reparse records processed. 1153354 index entries processed. Index verification completed. Phase duration (Index verification): 17.74 seconds. 0 unindexed files scanned. Phase duration (Orphan reconnection): 1.58 seconds. 0 unindexed files recovered to lost and found. Phase duration (Orphan recovery to lost and found): 545.30 milliseconds. 130655 reparse records processed. Phase duration (Reparse point and Object ID verification): 269.32 milliseconds.
Loput levynkorjauksen vaiheet 3-5 liittyvät muihin toimenpiteisiin, eivätkä ole relevantteja tämän ongelman kannalta.
Stage 3: Examining security descriptors ... Cleaning up 12525 unused index entries from index $SII of file 0x9. Cleaning up 12525 unused index entries from index $SDH of file 0x9. Cleaning up 12525 unused security descriptors. CHKDSK is compacting the security descriptor stream Security descriptor verification completed. Phase duration (Security descriptor verification): 263.99 milliseconds. 117414 data files processed. Phase duration (Data attribute verification): 1.86 milliseconds. CHKDSK is verifying Usn Journal... Usn Journal verification completed. Stage 4: Looking for bad clusters in user file data ... 918512 files processed. File data verification completed. Phase duration (User file recovery): 8.99 minutes. Stage 5: Looking for bad, free clusters ... 23156360 free clusters processed. Free space verification is complete. Phase duration (Free space recovery): 0.00 milliseconds. Correcting errors in the Volume Bitmap. Windows has made corrections to the file system. No further action is required. 242727807 KB total disk space. 148748732 KB in 560261 files. 350196 KB in 117417 indexes. 0 KB in bad sectors. 1003439 KB in use by the system. 65536 KB occupied by the log file. 92625440 KB available on disk. 4096 bytes in each allocation unit. 60681951 total allocation units on disk. 23156360 allocation units available on disk. Total duration: 9.50 minutes (570231 ms). Internal Info: 00 04 0e 00 ed 37 0a 00 bd 19 12 00 00 00 00 00 .....7.......... ab b7 00 00 b4 46 01 00 00 00 00 00 00 00 00 00 .....F.......... Windows has finished checking your disk. Please wait while your computer restarts.
Levynkorjauksen jälkeen työpöydän näkymä on yhä samanlainen, eli toimenpide ei itsessään poista haluttua sisältöä. Kansioiden manuaalinen poistaminen graafisen käyttöliittymän kautta ei vieläkään johda mihinkään.
Rekursiivinen poistaminen Remove-Item cmdlet-komennolla ja sen force-parametrilla johtaa yhä virheilmoitukseen:
Alikansioon navigoiminen ja sen sisällön listaaminen onnistuu nyt kuitenkin chkdsk-levynkorjauksen jäljiltä. Alikansion rekursiivinen poistaminen onnistuu Remove-Item cmdlet-komennolla ja sen force-parametrilla. Sama toimenpide tulee toistaa molempien työpöydän TEMP-kansioiden alikansioille, jossa ongelmatiedostot sijaitsevat. Kuvassa näkyy ensimmäisen TEMP-kansion tiedostot sisältävän alikansion poisto.
Kuvasta on myös havaittavissa, että vaikka ongelmatiedostot sisältänyt alikansio poistuu, ei TEMP-pääkansio vieläkään suostu poistumaan. Tässä vaiheessa tilanne on kuitenkin korjattavissa ainakin Linux Subsystem for Windowsin kautta rm-komennolla:
Molemmat kansiot poistuvat noilla toimenpiteillä lopullisesti:
Mainittakoon, että kyseessä ei onneksi ole kovin yleinen ongelma, mutta tähän todennäköisesti törmää ainakin satunnaisesti, jos vianselvittää loppukäyttäjien OneDrive-synkronointiongelmia säännöllisesti. Kaikki tässä esimerkkitapauksessa esitetyt vaiheet eivät myöskään välttämättä ole tarpeellisia, sillä olen itse korjannut vastaavia tilanteita ilman Windows Subsystem for Linuxin hyödyntämistä. Tarkat toimenpiteet ovat tilannekohtaisia, ja siksi tätä esimerkkiä voi soveltaa omaan vikatilanteeseensa sopivaksi.
Aiheeseen liittyen:
- Reparse Points – Win32 apps. URL: https://docs.microsoft.com/en-us/windows/win32/fileio/reparse-points
- chkdsk. URL: https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/chkdsk
- Windows Subsystem for Linux Installation Guide for Windows 10. URL: https://docs.microsoft.com/en-us/windows/wsl/install-win10
Artikkelin on kirjoittanut Vetonaulan IT-asiantuntija Markus Pyhäranta.